Sup*_*NES 6 sql-server output-clause
我有两张桌子,Table_1
和Table_2
.
Table_1
有列PK
(自动增量int
)和Value
(nchar(10)
).
Table_2
has 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)
有没有办法让这项工作?
我不得不把代码放在答案中,在评论中它看起来很丑......
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 不会让你在一个查询中完成所有这一切......