我有一個表tblstars_new,它每週從客戶端更新一次。我有另一個表tblstars,它需要從tblstars_new導入新的和更新的數據。針對不匹配的值編寫一條MERGE語句
查找tblstars_new中不存在的tblstars中的行,然後將其添加到tblstars中很簡單。
但是,我還需要在tblstars_new中查找列PandA_Code已更改的行,然後更新tblstars中的相同行。
該查詢告訴我來自tblstars_new的哪些行的PandA_Code已更改並需要在tblstars中進行更新。
SELECT
sn.*
FROM
tblstars_new sn
JOIN tblstars s ON sn.Student_ID_Number = s.Student_ID_Number AND sn.PandA_Code != s.PandA_Code
我想弄清楚會做出更改的MERGE語句。正如我在Prod中所做的那樣,我無法真正玩耍。兩個問題:
1)是否可以在沒有實際執行的情況下查看更改?
2)MERGE語句是否正確?
BEGIN TRAN;
MERGE tblstars AS T -- Target
USING tblstars_new AS S -- Source
ON
(T.Student_ID_Number = S.Student_ID_Number AND T.PandA_Code != S.PandA_Code)
WHEN NOT MATCHED BY TARGET
THEN
UPDATE SET T.PandA_Code = S.PandA_Code
OUTPUT $action;
ROLLBACK TRAN;
GO
取兩個表的備份並用新名稱保存,然後進行測試。我希望它不會造成太多的問題,並且是100倍安全的。 – Zi0n1
〜我認爲只是將您的WHEN NOT MATCHED切換到WHEN MATCHED可能會工作,但尚未測試 – bhs
如果@ sboahra的答案已解決您的問題,那麼需要從tblstars_new導入新的和更新的數據?那麼**新**? –