簡體   English   中英

插入with輸出子句

[英]Insert into with output clause

INSERT INTO Table1(group, account)

OUTPUT inserted.Id, B.title, B.amount 
INTO Table2(id2, title, amount) 

SELECT A.*,
         B.title,
           B.amount,
            B.id2    
FROM Table1 AS A

LEFT OUTER JOIN
(SELECT  title,
          amount,
           id2
 FROM Table2) AS B
 ON A.id = B.id2

我堅持這個..我有two join tables聯接two join tables ,我想要的是將同一組數據從table1復制到自身,並使用OUTPUT子句將新復制的數據的新id從table1復制到table2id2

但是現在有了上面的查詢,我無法通過所需的列..如何將B.titleB.amount列插入到table2

如果表1和表2具有1:1關系,並且兩者之間不存在外鍵,則可以在單個語句中執行此操作:

MERGE Table1 AS a 
USING
(   SELECT  A.[group], A.account, B.title, B.amount, B.id2    
    FROM    Table1 AS A
            LEFT OUTER JOIN Table2 AS B
                ON A.id = B.id2
) AS b
    ON 1 = 0
WHEN NOT MATCHED THEN 
    INSERT ([group], account)
    VALUES (b.[group], b.account)
OUTPUT inserted.Id, B.title, B.amount 
    INTO Table2(id2, title, amount);

SQL小提琴示例

但是實際上,如果您的表相關,則它們應該具有外鍵,並且在大多數情況下,它們不是1:1,而是1:n。

在這種情況下,您仍然需要使用MERGE來對新ID和舊ID都進行大寫,但是隨后您需要在執行對Table2的第二次插入之前在臨時表中捕獲此映射:

DECLARE @Map TABLE (OldID INT NOT NULL, NewID INT NOT NULL);

MERGE Table1 AS a 
USING
(   SELECT  A.ID, A.[group], A.account  
    FROM    Table1 AS A
) AS b
    ON 1 = 0
WHEN NOT MATCHED THEN 
    INSERT ([group], account)
    VALUES (b.[group], b.account)
OUTPUT inserted.Id, b.ID
    INTO @Map(NewID, OldID);

INSERT Table2 (id2, title, amount)
SELECT  m.NewID, b.title, b.amount
FROM    @Map AS m
        INNER JOIN Table2 AS b
            ON b.ID2 = m.OldID;

SQL小提琴示例

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM