use*_*911 9 sql t-sql sql-server sql-server-2000 case
我有一些使用多个if语句(大约100)的T-SQL代码,如下所示.如果第一个IF语句条件的计算结果为TRUE,它仍会评估99个语句的其余部分.
IF(@check = 'abc') SET @var1 = @value
IF(@check = 'def') SET @var2 = @value
IF(@check = 'ghi') SET @var3 = @value
IF(@check = 'jkl') SET @var4 = @value
IF(@check = 'mno') SET @var5 = @value
…
…
Run Code Online (Sandbox Code Playgroud)
我想将它们转换为使用CASE表达式.例如
CASE @check
WHEN 'abc' THEN SET @var1 = @value
WHEN 'def' THEN SET @var2 = @value
WHEN 'ghi' THEN SET @var3 = @value
WHEN 'jkl' THEN SET @var4 = @value
WHEN 'mno' THEN SET @var5 = @value
…
…
END
Run Code Online (Sandbox Code Playgroud)
但是,我无法这样做,我得到一个SQL错误,说我不能在CASE表达式中使用SET.
有没有人有任何想法我怎么能做到这一点?谢谢!
Chr*_*s J 23
case语句不会削减它:你可以使用SET和CASE的唯一方法是:
SET @var = CASE @check
WHEN 'abc' THEN @value
[etc]
END
Run Code Online (Sandbox Code Playgroud)
...这对你不起作用,因为这只能设置一个变量.所以你需要使用ELSE,即:
IF (@check = 'abc') SET @var1 = @value
ELSE IF (@check = 'def') SET @var2 = @value
ELSE IF (@check = 'ghi') SET @var3 = @value
ELSE IF (@check = 'jkl') SET @var4 = @value
ELSE IF (@check = 'mno') SET @var5 = @value
[...]
Run Code Online (Sandbox Code Playgroud)
但是,如果您有100个这样的条款设置100个不同的变量,那么听起来您的方法可能是错误的:我退后一步,问问自己为什么需要100个单独的变量.作为基于集合的解决方案,您可以做更好的事情,从核心或临时表读取.但是我们需要更多关于你要做什么的细节(有一个小但完全正常的例子).