我有一个带有自动生成的 ID 列的表(仅此而已!)
CREATE TABLE [dbo].[EmailGroup](
[EmailGroupGuid] [uniqueidentifier] NOT NULL
CONSTRAINT [PK_EmailGroup] PRIMARY KEY CLUSTERED ([EmailGroupGuid] ASC)
) ON [PRIMARY]
ALTER TABLE [dbo].[EmailGroup]
ADD CONSTRAINT [DF_EmailGroup_EmailGroupGuid] DEFAULT (newsequentialid()) FOR [EmailGroupGuid]
我想插入这个表并提取生成的 ID。但是,如果可能的话,我无法解决。它似乎提示缺少值/列。
DECLARE @Id TABLE (Id UNIQUEIDENTIFIER)
INSERT INTO EmailGroup
OUTPUT inserted.EmailGroupID INTO @Id
有没有办法做到这一点?我的意思是我可以在表格中添加一个虚拟列并轻松地做到这一点:
INSERT INTO EmailGroup (Dummy)
OUTPUT inserted.EmailGroupID INTO @Id
VALUES (1)
但是我真的不想。
我也可以指定我自己的 ID 并插入它,但同样,我真的不想这样做。
最佳答案
虽然我不确定您为什么需要这样的表,但您问题的答案是使用关键字 DEFAULT
:
INSERT INTO EmailGroup (EmailGroupGuid)
OUTPUT inserted.EmailGroupGuid INTO @Id
VALUES(DEFAULT);
另一种选择是使用
DEFAULT VALUES
,如 Pawan Kumar 的回答所示。这两个选项之间的主要区别在于指定列列表并使用关键字
default
给你更多的控制权。当表只有一列时似乎并不多,但是如果您将向表中添加列,并希望向其中插入特定值,请使用
default values
将不再是一个有效的选择。来自 Microsoft Docs
INSERT
(Transact-SQL) :默认
Forces the Database Engine to load the default value defined for a column.
If a default does not exist for the column and the column allows null values, NULL is inserted.
For a column defined with the timestamp data type, the next timestamp value is inserted.
DEFAULT is not valid for an identity column.
默认值
Forces the new row to contain the default values defined for each column.
如您所见,
default
是基于列的,而 default values
是基于行的。
关于没有指定列的 SQL Server 插入,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50226051/