7

我有两张桌子,Table_1Table_2

Table_1有列PK(autoincrementing int) 和Value( nchar(10))。

Table_2FK( 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')

但是 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')

有什么办法可以使这项工作?

4

2 回答 2

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 不会让你在一个查询中完成所有操作......

于 2012-10-26T21:07:22.060 回答
0

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

于 2012-10-26T20:41:46.633 回答