繁体   English   中英

在Where条件中将if或CASE WHEN与AND语句一起使用

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

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM