SQL Server:多输出子句

Sup*_*NES 6 sql-server output-clause

我有两张桌子,Table_1Table_2.

Table_1有列PK(自动增量int)和Value(nchar(10)).

Table_2has FK(int),Key(nchar(10))和Value(nchar(10)).

也就是说,Table_1是一个数据表,并且Table_2是一个键值存储,其中一行Table_1可以对应于0,1个或更多个键和值Table_2.

我想编写一个代码,以编程方式构建一个查询,该查询将一行插入到Table_1可变行数中,并Table_2使用主键Table_1.

我可以用一行轻松完成:

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

但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')
Run Code Online (Sandbox Code Playgroud)

有没有办法让这项工作?

Ozr*_*ric 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
Run Code Online (Sandbox Code Playgroud)

顺便说一句,如果没有一些丑陋的黑客手段,SQL Server 不会让你在一个查询中完成所有这一切......