SQL Server:多输出子句

时间:2012-10-26 20:38:42

标签: sql-server output-clause

我有两个表,Table_1Table_2

Table_1包含PK列(自动增量int)和Valuenchar(10))。

Table_2FKint),Keynchar(10))和Valuenchar(10))。

也就是说,Table_1是一个数据表,Table_2是一个键值存储,Table_1中的一行可能对应0,1个或更多键和值在Table_2

我想编写一个代码,以编程方式构建一个查询,使用Table_1中的主键将一行插入Table_2,将可变数量的行插入Table_1。< / p>

我可以用一行轻松完成:

INSERT INTO Table_1 ([Value])
OUTPUT INSERTED.PK, 'Test1Key', 'Test1Val' INTO Table_2 (FK, [Key], [Value])
VALUES ('Test')

但是SQL似乎不喜欢拥有多行的想法。这失败了:

INSERT INTO Table_1 ([Value])
OUTPUT INSERTED.PK, 'Test1Key', 'Test1Val' INTO Table_2 (FK, [Key], [Value])
OUTPUT INSERTED.PK, 'Test2Key', 'Test2Val' INTO Table_2 (FK, [Key], [Value])
OUTPUT INSERTED.PK, 'Test3Key', 'Test3Val' INTO Table_2 (FK, [Key], [Value])
VALUES ('Test')

有没有办法让这项工作?

2 个答案:

答案 0 :(得分:3)

我不得不把代码放在答案中,在评论中它看起来很难看......

CREATE TABLE #Tmp(PK int, value nchar(10))

INSERT INTO Table_1 ([Value])
OUTPUT INSERTED.PK, inserted.[Value] INTO #Tmp
SELECT 'Test'

INSERT INTO Table_2 (FK, [Key], Value)
SELECT PK, 'Test1Key', 'Test1Val' FROM #Tmp
UNION ALL SELECT PK, 'Test2Key', 'Test2Val' FROM #Tmp
UNION ALL SELECT PK, 'Test3Key', 'Test3Val' FROM #Tmp

顺便说一句,SQL Server不会让你在一个查询中完成所有操作而不会有一些丑陋的黑客...

答案 1 :(得分:0)

尝试将INSERTED.PK值放入参数,然后使用3 INSERT..VALUES或1 INSERT..SELECT语句插入表2中。