【问题标题】:On insert, output columns that wern't inserted but in joined tables [duplicate]在插入时,输出未插入但在连接表中的列[重复]
【发布时间】:2017-07-19 09:58:30
【问题描述】:

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

临时表

运行ID |文档 ID |数量 7 50 C 6 12

表 1

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

表 2

T2ID |运行ID | T1Id 1 乙 1 2 C 2 3 天 3

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

结果表应如下所示:

表 1

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

表2

T2ID |运行ID | T1Id 1 乙 1 2 C 2 3 天 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。这怎么可能?

【问题讨论】:

    标签: sql sql-server sql-insert


    【解决方案1】:

    您可以使用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 ;
    

    【讨论】:

    • 感谢您的帮助!最后是 MERGE 的真正好处!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-12-04
    • 1970-01-01
    • 1970-01-01
    • 2018-09-17
    • 2016-01-13
    • 2013-02-23
    • 1970-01-01
    相关资源
    最近更新 更多