我創建了一個表,其中一列代表行的插入日期:
create table foo
(
id int not null primary key identity,
bar varchar(50),
insertion_date datetime default current_timestamp
);
我使用以下陳述句插入新行:
insert into test (foo) values ('placeholder');
我想要完成的是id在insertion_date列中獲取列的行為,因此不必在insert陳述句中指定它,如下所示:
insert into test values('placeholder');
提前致謝
uj5u.com熱心網友回復:
據我所知,可以準確地獲得您所要求的內容,但可以插入視圖。
CREATE VIEW fooView AS
SELECT id, bar
FROM dbo.foo;
GO
INSERT dbo.fooView VALUES ('baz');
GO
缺點是插入和任何需要insertion_date.
我個人不會批準執行上述操作的拉取請求(代碼審查)以避免在插入時指定列。
uj5u.com熱心網友回復:
您仍然必須在插入中指定列名,即使insertion_date. DEFAULT作業方式不同IDENTITY。除非您采取特定步驟來執行此操作,否則資料庫引擎始終會為您生成IDENTITY 列,并且您無法指定它。因此,您無需將其包含在列串列中。 DEFAULT不能那樣作業。您始終可以為帶有默認值的列指定一個值。如果您沒有另外指定一個 , SQL Server 將只使用默認值。如果它是您的IDENTITY列之外的唯一列,那么您可以省略它。但是由于您有多個其他列,因此您必須 指定列,否則您希望值轉到的列中存在歧義。
insert into foo values ('placeholder');
'placeholder'應該為哪一列插入值?你想讓它進入bar或insertion_date。這對人類來說是顯而易見的,但除非您告訴它,否則查詢決議器無法知道。
換個角度來看,考慮一下:
insert into foo values ('2021-10-28');
這是bar或的有效值insertion_date。它應該是哪一個?查詢決議器如何知道您要使用它 forinsertion_date而不是bar?唯一的辦法就是你明確地告訴它。
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/340082.html
標籤:sql-server 数据库 查询语句 目录 数据表
