在SQL Server中的case语句中使用set

Jac*_*kal 0 t-sql sql-server

我想使用一条CASE语句在SQL Server中设置一个变量。例如:

DECLARE @UNITY VARCHAR(5)
DECLARE @AUX VARCHAR(5)

CASE
    WHEN @UNITY = 'U1' THEN @AUX = 'M1'
    WHEN @UNITY = 'U2' THEN @AUX = 'M2'
    WHEN @UNITY = 'U3' THEN @AUX = 'M3'
END
Run Code Online (Sandbox Code Playgroud)

Zoh*_*led 5

您不能case用作流控制。SQL case是一个根据条件返回标量值的表达式。备注部分对此
进行了详细记录:

CASE表达式不能用于控制Transact-SQL语句,语句块,用户定义的函数和存储过程的执行流程。有关流控制方法的列表,请参见流控制语言(Transact-SQL)

可以这样编写工作代码:

DECLARE @UNITY VARCHAR(5)
DECLARE @AUX VARCHAR(5)

SET @AUX = 
CASE @UNITY
    WHEN 'U1' THEN 'M1'
    WHEN 'U2' THEN 'M2'
    WHEN 'U3' THEN 'M3'
END 
Run Code Online (Sandbox Code Playgroud)

注意为简洁起见,我使用简单CASE表达式语法。