[英]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.