tSQL CASE来控制执行

时间:2009-12-24 17:28:31

标签: sql sql-server tsql syntax

我理解如何使用case语句返回不同的值:

SELECT CASE Color
         WHEN 'Blue' THEN 'Water'
         WHEN 'Black' THEN 'Oil'
         WHEN 'Red' THEN 'Blood'
       END
  FROM dbo.Liquid

有没有办法用它来控制流量而不是IF-ELSE,即

DECLARE @Color varchar()
SELECT @Color = Color FROM dbo.Liquid WHERE ID = @MyID

CASE (@Color)
  WHEN 'Blue' THEN SELECT 'Water'
  WHEN 'Black' THEN SELECT 'Oil'
  WHEN 'Red' THEN PRINT 'HELP! I''m bleeding!'
END

2 个答案:

答案 0 :(得分:8)

不,CASE expression不能用于控制Transact-SQL语句,语句块,用户定义函数和存储过程的执行流程。

有关流量控制方法的列表,请参阅Control-of-Flow Language (Transact-SQL)

答案 1 :(得分:1)

不,您需要为该逻辑使用IF语句,因为在CASE语句中您基本上返回了一个值。你可以这样做:

declare @result varchar(500)

SET @result =
CASE
  WHEN @Color = 'Blue' THEN 'Water'
  WHEN @Color = 'Black' THEN 'Oil'
  WHEN @Color = 'Red' THEN 'HELP! I''m bleeding'
END

IF @Color = 'Red'
  PRINT @result

但我认为这是你能做的最好的事情。就个人而言,我只是在这里使用IF声明,因为这是最好的选择。