我有像这样的源和表目标表
Source:
Column1 Column2 Column3 Column4
Destination:
Column1 Column2 Column5 Column6
如何在SQL SERVER中实现此逻辑
IF SOURCE.Column1 = DESTINATION.Column1 AND SOURCE.Column2 = DESTINATION.Column2
UPDATE DESTINATION Column5 = SOURCE.Column1 + 12 (some other logic)
ELSE
Do something else
问题是,我必须处理十亿行,那么实现上述逻辑的最佳方法是什么
EDIT1
IF SOURCE.Column1 = DESTINATION.Column1 AND SOURCE.Column2 = DESTINATION.Column2
UPDATE DESTINATION Column5 = SOURCE.Column1 + 12 (some other logic)
ELSE
**INSERT SOURCE table row to the destination**
如何使用merge语句实现相同的功能,因为我只需要考虑两列
答案 0 :(得分:1)
<击>
您UPDATE
JOIN
UPDATE d
SET d.Column5 = CASE WHEN some logic THEN s.Column1 + 12 (some other logic)
ELSE Something else
ELSE
FROM DESTINATION d
LEFT JOIN SOURCE s ON s.Column2 = d.Colcumn2;
,在您的情况下,性能会更好。像这样:
MERGE INTO SOURCE AS TGT
USING DESTINATION AS SRC
ON TGT.Column1 = SRC.Column1
WHEN MATCHED THEN
UPDATE SET
TGT.Column5 = SRC.Column1 + 12 (some other logic)
WHEN NOT MATCHED THEN
INSERT (Source columns list)
VALUES (...);
击> <击> 撞击>
您可以使用MERGE
语句,如下所示:
INSERT
请注意:
在INTO TableName
语句中没有MERGE
,因为目标表的名称已在SOURCE
子句中定义,即SOURCE AS TGT
。这就是我定义DESTINATION AS SRC
和MERGE
。
必须以分号结束{{1}}语句。最佳做法是使用al sql语句。