如果我在 MERGE 语句中有多个 WHEN MATCHED 语句,如果它们为真,它们是否都执行?
我的例子:
DECLARE @X bit = NULL;
--skipping the MERGE statement, straight to WHEN MATCHED
WHEN MATCHED AND A = 1
@X = 0;
WHEN MATCHED AND B = 1
@X = 1;
在 4 种可能性中,X 的状态分别是什么?
A|B|X
0|0|?
0|1|?
1|0|?
1|1|?
基本上,我很好奇每个 WHEN MATCHED 子句后是否有隐式 BREAK。
最佳答案
要回答您的问题,是的,它只会运行一场比赛然后中断。但是,如果您希望在更新中有允许条件匹配的逻辑,CASE
语句对此非常有用。
举个例子:
MERGE INTO YourTable
USING (VALUES (1, 1, NULL), (0, 0, NULL), (0, 1, NULL), (1, 0, NULL))
T2 (a2,b2,c2)
ON a = a2 AND b = b2
WHEN MATCHED THEN
UPDATE SET c =
CASE
WHEN a = 1 THEN 0
WHEN b = 1 THEN 1
ELSE NULL
END
WHEN NOT MATCHED THEN
INSERT (a, b) VALUES (a2, b2);
SELECT * FROM YourTable ORDER BY a,b;
结果:
A B C
--------------
0 0 (null)
0 1 1
1 0 0
1 1 0
关于sql - 当使用多个 WHEN MATCHED 语句时,它们是全部执行,还是只执行一个?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16847650/