[英]Using a if or CASE WHEN with AND statements in a Where Condition
我正在尝试将“存储的生产者”修改为一个大语句,而不是使用3个不同的更新。 我面临的问题是在哪里条件。 SP允许您为三个参数RA / RS / IC中的任何一个传递NULL。 因此,如果它们为NULL,则我不想在where条件下执行RA = @OldRA。 这将在Single更新中起作用,因为没有匹配项。
我曾尝试在我的位置使用IF / CASE WHEN,但无法弄清楚如何在这些值上使用NULL值。 如果它为NULL,我不希望它在AND中,对吗? 所以说我传入一个RA和一个RS,我需要RA = OLDRA和RS = OLDRS,但不需要IC = OLDIC,因为我们不想匹配这些。 有这种情况的解决方案吗?
/*3 Updates */
UPDATE xxx fai
SET fai.RS = @RS
WHERE fai.RS = @OldRS
UPDATE xxx fai
SET fai.RA = @RA
WHERE fai.RA = @OldRA
UPDATE xxx fai
SET fai.IC = @IC
WHERE fai.IC = @OldIC
/*New BIG STATEMENT */
UPDATE
xxx fai
SET
fai.RS = CASE WHEN `fai.RS` = ''
or `fai.RS` IS NULL THEN `xxx` ELSE @RS END,
fai.RA = CASE WHEN `fai.RA` = ''
or `fai.RA` IS NULL THEN `xxx` ELSE @RA END,
fai.IC = CASE WHEN `fai.IC` = ''
or `fai.IC` IS NULL THEN @IC ELSE `xx` END
WHERE
fai.RS = @OldRS AND fai.RA = @OldRA AND fai.IC = @OldIC
以下语句应该起作用:
UPDATE
xxx fai
SET
fai.RS = CASE WHEN fai.RS = ''
or fai.RS IS NULL THEN fai.RS ELSE @RS END,
fai.RA = CASE WHEN fai.RA = ''
or fai.RA IS NULL THEN fai.RA ELSE @RA END,
fai.IC = CASE WHEN fai.IC = ''
or fai.IC IS NULL THEN fai.IC ELSE @IC END
WHERE
fai.RS = @OldRS OR fai.RA = @OldRA OR fai.IC = @OldIC
话虽这么说,但使用3条单独的语句会带来更好的性能。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.