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

时间:2017-07-19 09:58:30

标签: sql sql-server sql-insert

我目前正致力于某种数据映射。假设我有以下三个表:

TemporaryTable

RUNID | DocId | Amount
E       7       50
C       6       12

表1

T1ID | DocID | Amount
1      5       10
2      6       20
3      6       50

表2

T2ID | RUNID | T1Id
1      B       1
2      C       2
3      D       3

在表格Table1Table2中,列T1IDT2ID是自动填充的标识列。 我现在要做的是将TemporaryTable中的值插入Table1并将值RunID中的值保存在TemporaryTable和新生成的T1IDTable2

结果表应如下所示:

表1

T1ID | DocID | Amount
1      5       10
2      6       20
3      6       50
4      7       50
5      6       12

表2

T2ID | RUNID | T1Id
1      B       1
2      C       2
3      D       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

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

1 个答案:

答案 0 :(得分:4)

您可以使用MERGE命令使用一些始终为false的条件来模拟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 ;