我有一个包含单列的表,这是一个自动生成的标识
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}}的定义。
答案 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