插入时,输出未插入但在连接表中的列

Rom*_*mbé 2 sql sql-server sql-insert

我目前正在研究某种数据映射。假设我有以下三个表:

临时表

鲁尼德 | 文档编号 | 数量
英语 7 50
C 6 12

表格1

T1ID | 文档ID | 数量
1 5 10
2 6 20
3 6 50

表2

T2ID | 鲁尼德 | T1Id
1 乙 1
2 C 2
3D 3

在表中Table1Table2T1IDT2ID是自动填充的标识列。我现在要做的是将值插入TemporaryTableTable1并将值保存在列中RunIDTemporaryTable新生成的T1IDTable2

结果表应如下所示:

表格1

T1ID | 文档ID | 数量
1 5 10
2 6 20
3 6 50
4 7 50
5 6 12

表2

T2ID | 鲁尼德 | T1Id
1 乙 1
2 C 2
3D 3
4 E 4
5 C 5

我想在output声明的帮助下做到这一点。像这样的东西:

CREATE TABLE #map(T1ID, RUNID)
INSERT INTO Table1(DocId, Amount)
OUTPUT inserted.T1ID, t.RunId INTO #map 
SELECT t.DocId, t.Amount
FROM TemporaryTable t
Run Code Online (Sandbox Code Playgroud)

这显然不起作用,因为我无法访问输出语句中的 t.RunId 。这怎么可能做到呢?

Nen*_*vic 5

您可以使用MERGE命令和一些始终为假的条件来模拟您的插入,其中包含所有可用的列OUTPUT

MERGE Table1 t1
USING TemporaryTable t
  ON 1=2
WHEN NOT MATCHED THEN
  INSERT (DocId, Amount)
  VALUES (t.DocId, t.Amount)
  OUTPUT inserted.T1ID, t.RunId 
  INTO #map ;
Run Code Online (Sandbox Code Playgroud)