如何向仅含自动生成ID列的SQL Server表插入数据并获取ID
解决方法:插入数据并提取自动生成的UniqueIdentifier ID
没问题,这其实完全可以实现,你之前报错是因为没有正确触发默认值的使用。下面给你两种实用的方法,既能完成插入,又能拿到生成的EmailGroupGuid:
方法1:使用INSERT + OUTPUT子句(一步获取ID)
这是最直接的方式,插入的同时就能返回生成的唯一标识符:
-- 如果你需要把ID存到变量里后续使用 DECLARE @GeneratedGuid UNIQUEIDENTIFIER; INSERT INTO [dbo].[EmailGroup] ([EmailGroupGuid]) OUTPUT inserted.EmailGroupGuid INTO @GeneratedGuid VALUES (DEFAULT); -- 查看生成的ID SELECT @GeneratedGuid AS NewEmailGroupGuid;
如果不需要存储到变量,直接返回结果也可以:
INSERT INTO [dbo].[EmailGroup] ([EmailGroupGuid]) OUTPUT inserted.EmailGroupGuid VALUES (DEFAULT);
方法2:使用DEFAULT VALUES关键字
这种写法更简洁,专门用于所有列都有默认值的表:
-- 直接插入并返回ID INSERT INTO [dbo].[EmailGroup] OUTPUT inserted.EmailGroupGuid DEFAULT VALUES;
为什么之前会报错?
你的表只有一个列,且该列有newsequentialid()的默认约束,但如果直接执行INSERT INTO [dbo].[EmailGroup] VALUES ();或者不指定任何列/值,SQL Server会认为你需要手动提供EmailGroupGuid的值,而你没有给出,所以触发报错。上面两种方法明确告诉SQL Server要使用列的默认值,就不会有问题了。
内容的提问来源于stack exchange,提问作者AaronHolland
相关产品推荐
相关产品推荐

