将多行默认值插入表中

时间:2012-10-12 16:32:56

标签: sql-server tsql

我有一个包含单列的表,这是一个自动生成的标识

create table SingleIdTable (
   id int identity(1,1) not null
)

我可以使用自动生成的ID插入一行:

insert into SingleIdTable default values

我想插入许多行并使用输出语法来获取它们的ID,例如:

insert into SingleIdTable
output inserted.Id into @TableOfIds
    select (default values) from SomeOtherTable where Attribute is null

意图是使用自动生成的ID为SingleIdTable中的SomeOtherTable中的每一行插入行Attribute,其中SomeOtherTable为空。以上不起作用,但我怎么能这样做。我注意到,如果我的表格不仅仅有一列我可以做到,但我不能选择空行,这是我真正想要做的。

我无法更改{{1}}的定义。

2 个答案:

答案 0 :(得分:21)

如果是SQL Server 2008+,您可以使用MERGE。示例语法如下。

MERGE INTO SingleIdTable
USING (SELECT *
       FROM   SomeOtherTable
       WHERE  Attribute IS NULL) T
ON 1 = 0
WHEN NOT MATCHED THEN
  INSERT
  DEFAULT VALUES
OUTPUT INSERTED.id; 

我不确定这个单列表有什么实际用途吗?

答案 1 :(得分:1)

您没有指定您所使用的SQL Server版本。如果你碰巧在SQL 2012上,你可能会用一个序列替换你的SingleIdTable:http://msdn.microsoft.com/en-us/library/ff878091.aspx