簡體   English   中英

SQL Server更新多列並根據兩個表中的鍵添加缺少的行

[英]SQL Server update multiple columns and add missing rows based on a key from two tables

我想在SQL Server中基於常見的非數字列鍵[Key]從源表B更新目標表A中的多列[C1],[C2],並在其中添加缺少的行(包括鍵)目標表A。表A和B的列(包括鍵)完全相同。 限制是永遠不要從A中刪除任何記錄。 我不介意數據不是真實的,但是我介意數據是否丟失。 因此,我相信沒有DROP no Truncate。 最有效的方法是什么?

示例表

    Destination Table A with columns:
[Key][C1][C2]
    A, 1, 2
    B, 3, 4
    C, 5, 6

    SourceTable B with columns:
[Key][C1][C2]
    A, 2, 1
    B, 3, 4
    C, 7, 6
    D, 0, 0

預期結果A與B完全相同

    Destination Table A:
[Key][C1][C2]
    A, 2, 1
    B, 3, 4
    C, 7, 6
    D, 0, 0

編輯:我忘了提到,如果以后在某些情況下從表B中刪除了某些內容,例如,具有鍵A的行,則在更新時也應從表A中刪除它。

看看這個關鍵字: https : //msdn.microsoft.com/en-us/library/bb510625.aspx

這是解決方案:

   ;MERGE INTO [Table_A] AS Target  
    USING (SELECT [B1],[B2],[B3] FROM [Table_B])
           AS Source ([B1],[B2],[B3])  
    ON Target.[A1] = Source.[B1]  
    WHEN MATCHED THEN  
    UPDATE 
    SET [A2] = Source.[B2],
        [A3] = Source.[B3]  
    WHEN NOT MATCHED BY TARGET THEN  
    INSERT ([A1],[A2],[A3]) VALUES ([B1],[B2],[B3]);

以及刪除表A中多余鍵的代碼:

;WITH IdsToDelete ([A1]) AS
(
    SELECT DISTINCT [A1]
    FROM [Table_A]
    WHERE [A1] NOT IN (SELECT [B1] FROM [Table_B])

)
DELETE t1 
FROM [Table_A] t1 
    JOIN IdsToDelete itd ON t1.[A1] = itd.[A1]

暫無
暫無

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

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