没有指定列的 SQL Server 插入

标签 sql sql-server tsql sql-insert

我有一个带有自动生成的 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/

相关文章:

sql-server - 使用覆盖索引、合并连接、散列连接的查询

mysql - 获取 sql 结果作为数组

sql - 检查另一个表sql中某列的值是否存在

c# - 如何从asp.net sql成员(member)资格提供程序中的id获取角色?

sql-server - SQL Server 检查表达式的结果数据类型

database - 在 SQL 中编写错误消息

mysql - 如果一行未通过过滤器,则可以忽略结果组

mysql - SQL ORDER 按列加辅助列有条件

mysql - 如何查看 MySQL 中外键的 ON DELETE 和 ON UPDATE?

c# - Sql Server 中的 DateTime 插入更改值