[英]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
復制到table2
列id2
。
但是現在有了上面的查詢,我無法通過所需的列..如何將B.title
和B.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);
但是實際上,如果您的表相關,則它們應該具有外鍵,並且在大多數情況下,它們不是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;
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.