如何插入只有一个IDENTITY列的表?

91

在试图回答这个问题的过程中,我想出了这个问题。

考虑以下名为GroupTable的MS-SQL表:

GroupID
-------
1  
2  
3  

其中GroupID是主键并且是Identity列。

如何向表中插入新行(从而生成新的ID),而不使用IDENTITY_INSERT ON

请注意,这样做是不可取的:

INSERT INTO GroupTable() Values ()   

...不起作用。

编辑:我们在讨论 SQL 2005 或 SQL 2008。

5个回答

139

这应该可以正常工作:

INSERT INTO GroupTable DEFAULT VALUES 

我无法在Visual Studio 2008/SQL Express 2005中使其工作。有什么想法吗?相同的表格布局,一个列,主键,identity(1,1)。 - Thomas Sandberg
我正在使用SQL 2008 R2,对我来说也没有什么乐趣! - TDaver
在我的SQL Server 2008 Express上可以运行。 - Adrian Lynch
3
在 SQL Server 2008 及以后的版本中,可以使用 merge 运算符实现此功能。例如:merge into TableName using (values (1), (2), (3)) s(n) on 1=0 when not matched then insert default values; - i-one

17

这是你需要的:

INSERT INTO GroupTable DEFAULT VALUES

2

可以一次性插入多行数据。

例如,要插入30行数据: INSERT INTO GroupTable DEFAULT VALUES GO 30

这将通过每次递增标识列来插入30行数据。


不确定SQL 2008,但在2008R2中这不起作用(我收到通用错误“附近的语法无效'GO'”) - Elaskanator
1
@Elaskanator GO 必须单独成行。看起来 RMK 只是格式化他的示例不当,忘记将其放在新行上。GO 不是 T-SQL 关键字,而是 SSMS 识别如何处理前面的 T-SQL 的特殊命令。 - J.D.

0

你可以尝试使用序列或类似的东西吗?从序列中选择,它会给你序列中的下一个值。


我认为他在谈论Oracle数据库。 - codeulike
我知道 Oracle 中存在序列,不确定 SQL Server 中是否存在类似的东西。这就是为什么我用“或类似物”后缀,并且给出了序列的定义以供参考的原因。 - Mike Pone
3
SQL Server 2012有序列。 - Nick Chammas

-1

这个实际上会起作用--

向默认表插入值


你的回答可以通过提供更多支持信息来改进。请编辑以添加进一步的细节,例如引用或文档,以便他人可以确认你的答案是正确的。您可以在帮助中心找到有关如何编写良好答案的更多信息。 - Community

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接