没有指定列的SQL Server插入

没有指定列的SQL Server插入,sql,sql-server,tsql,sql-insert,Sql,Sql Server,Tsql,Sql Insert,我有一个自动生成ID列的表(仅此而已!) 我想插入此表并提取生成的ID。但是,我无法确定这是否可行。它似乎在抱怨缺少值/列 DECLARE @Id TABLE (Id UNIQUEIDENTIFIER) INSERT INTO EmailGroup OUTPUT inserted.EmailGroupID INTO @Id 有没有办法做到这一点?我的意思是,我可以向表中添加一个虚拟列,并轻松地执行此操作: INSERT INTO EmailGroup (Dummy) OUTPUT inser

我有一个自动生成ID列的表(仅此而已!)

我想插入此表并提取生成的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);
另一种选择是使用
默认值
,如Pawan Kumar的回答所示

这两个选项之间的关键区别在于,指定列列表并使用关键字
default
可以提供更多的控制。
当表只有一列时,这似乎不多,但如果要向表中添加列,并希望向列中插入特定值,则使用
默认值
将不再是有效的选项

从上的Microsoft文档:

违约

强制数据库引擎加载为列定义的默认值。
如果该列不存在默认值,且该列允许空值,则插入空值。
对于使用时间戳数据类型定义的列,将插入下一个时间戳值。
默认值对于标识列无效

默认值

强制新行包含为每列定义的默认值

如您所见,
默认值
是基于列的,而
默认值
是基于行的。

请使用此选项

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]

DECLARE @Id TABLE (Id UNIQUEIDENTIFIER)

INSERT INTO EmailGroup 
OUTPUT inserted.EmailGroupGuid INTO @Id DEFAULT VALUES

SELECT * FROM @Id
我笔记本电脑的最后3个输出

--92832040-7D52-E811-B049-68F728AE8695
--2B6ADC5F-7D52-E811-B049-68F728AE8695
--0140AF66-7D52-E811-B049-68F728AE8695

为什么不直接使用自动递增列呢?
--92832040-7D52-E811-B049-68F728AE8695
--2B6ADC5F-7D52-E811-B049-68F728AE8695
--0140AF66-7D52-E811-B049-68F728AE8695