【问题标题】:SQL Server: Multiple Output ClausesSQL Server:多个输出子句
【发布时间】:2012-10-26 20:38:42
【问题描述】:

我有两张桌子,Table_1Table_2

Table_1 具有列PK(自动递增int)和Valuenchar(10))。

Table_2FK (int)、Key (nchar(10)) 和 Value (nchar(10))。

也就是说Table_1是一张数据表,Table_2是一个key-value存储,Table_1中的一行可能对应Table_2中的0、1个或多个key和value。

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

一排就能轻松搞定:

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

有什么办法可以做到吗?

【问题讨论】:

  • Read the MSDN documentation on the OUTPUT clause - 您可以将多行输出到例如一个临时表(或一个表变量 - 或直接进入目标表!)
  • 我已经阅读了,但可能错过了您所指的内容。输出类似 INSERTED.* 的东西在这里并不合适,因为我只想从一个插入的行中多次输出值。我想你不能给我举个例子吗?

标签: sql-server output-clause


【解决方案1】:

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

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

顺便说一句,如果没有一些丑陋的 hack,SQL Server 不会让您在一个查询中完成所有操作...

【讨论】:

    【解决方案2】:

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

    【讨论】:

      猜你喜欢
      • 2015-09-04
      • 2019-05-18
      • 2016-12-14
      • 2015-10-07
      • 2011-07-30
      • 2011-05-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多