我想根据一系列条件为变量赋值。我可以使用IF / ELSE来做到这一点,如以下代码所示:
DECLARE @param1 VARCHAR(100) = 'value1';
DECLARE @param2 AS Varchar (25) = 'value2';
DECLARE @param3 AS Varchar (25) = 'value3';
DECLARE @param4 AS Varchar(25) = 'value4';
SELECT @param1 = @param1 + '_' + @param2;
BEGIN
IF LEN(@param3) > 0 AND LEN(@param4) > 0
SELECT @param1= @param1+ '_' + @param3 + '_' + @param4;
ELSE
IF LEN(@param3) > 0
SELECT @param1= @param1+ '_' + @param3;
ELSE IF LEN(@param4) > 0
SELECT @param1= @param1 + '_' + @param4;
END
我想用WHEN / THEN替换IF / ELSE。像这样:
SELECT CASE
WHEN LEN(@param3) > 0 AND LEN(@param4) > 0 THEN
@param1 = @param1 + '_' + @param2 + '_' + @param3 + '_' + @param4
WHEN LEN(@param3) > 0 AND LEN(@param4) <= 0 THEN
@param1 = @param1 + '_' + @param2 + '_' + @param3
WHEN LEN(@param3) <= 0 AND LEN(@param4) > 0 THEN
@param1 = @param1 + '_' + @param2 + '_' + @param4
ELSE @param1 = @param1 + '_' + @param2
答案 0 :(得分:4)
CASE
子句是一个返回值的表达式。因此,您无法在CASE
内部进行分配。但是您可以将CASE
的结果分配给变量。
SELECT @param1 = CASE
WHEN LEN(@param3) > 0 AND LEN(@param4) > 0 THEN
@param1 + '_' + @param2 + '_' + @param3 + '_' + @param4
WHEN LEN(@param3) > 0 AND LEN(@param4) <= 0 THEN
@param1 + '_' + @param2 + '_' + @param3
WHEN LEN(@param3) <= 0 AND LEN(@param4) > 0 THEN
@param1 + '_' + @param2 + '_' + @param4
ELSE
@param1 + '_' + @param2
END