我目前正致力于某种数据映射。假设我有以下三个表:
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
在表格Table1
和Table2
中,列T1ID
和T2ID
是自动填充的标识列。
我现在要做的是将TemporaryTable
中的值插入Table1
并将值RunID
中的值保存在TemporaryTable
和新生成的T1ID
中Table2
结果表应如下所示:
表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。怎么可以这样做?
答案 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 ;