为什么此“ WHEN THEN” SQL查询未返回预期结果?

时间:2019-12-09 03:47:41

标签: sql tsql sql-server-2008 case-when

有人可以解释为什么此查询将NULL作为结果,但是我设置了@wnum变量吗?我已经尝试过所有可能想到的不同的运算符/命令。

如果@ wnum = 49,则结果应为@ wnum3 = 52,@ wnum4 = 53或 @ wnum3 = 1,如果@ wnum = 50则@ wnum4 = 2

DECLARE @wnum AS int SET @wnum = 49
DECLARE @wnum3 AS int
DECLARE @wnum4 AS int

SELECT @wnum3
SET @wnum3 = CASE WHEN @wnum >=50 THEN 1 WHEN @wnum <50 THEN @wnum+3 
END

SELECT@wnum4
SET @wnum4 = CASE WHEN @wnum >=50 THEN 2 WHEN @wnum <50 THEN @wnum+4 
END

4 个答案:

答案 0 :(得分:3)

要在设置变量之前进行选择。在SETSELECT行之间切换:

DECLARE @wnum AS int SET @wnum = 49
DECLARE @wnum3 AS int
DECLARE @wnum4 AS int

SET @wnum3 = CASE WHEN @wnum >=50 THEN 1 WHEN @wnum <50 THEN @wnum+3 END
SELECT @wnum3

SET @wnum4 = CASE WHEN @wnum >=50 THEN 2 WHEN @wnum <50 THEN @wnum+4 END
SELECT @wnum4

答案 1 :(得分:0)

我建议您始终使用SET来设置单个变量的值。它是ANSI标准。要设置多个变量,可以使用SELECT(这是TSQL扩展)。

一旦设置了值,就可以选择该值。否则,您将获得NULL值。

如果格式正确,则不会引起混淆。我已经按照ANSI标准用SET重新编写了代码。现在,您将了解正在发生的事情。

-- Declarations
DECLARE @wnum AS INT;
DECLARE @wnum3 AS INT;
DECLARE @wnum4 AS INT;

--Initializations
SET @wnum = 49;

-- Logic 

SET @wnum3 = (SELECT CASE WHEN @wnum >=50 THEN 1 WHEN @wnum <50 THEN @wnum+3 END);

SELECT @wnum3;

SET @wnum4 = (SELECT CASE WHEN @wnum >=50 THEN 2 WHEN @wnum <50 THEN @wnum+4 END);

SELECT @wnum4;

答案 2 :(得分:-1)

请尝试在下面的查询中解决您的问题。

DECLARE @wnum AS INT

SET @wnum = 49

DECLARE @wnum3 AS INT
DECLARE @wnum4 AS INT

SELECT @wnum3 = CASE 
        WHEN @wnum >= 50
            THEN 1
        WHEN @wnum < 50
            THEN @wnum + 3
        END

SELECT @wnum3

SELECT @wnum4 = CASE 
        WHEN @wnum >= 50
            THEN 2
        WHEN @wnum < 50
            THEN @wnum + 4
        END
SELECT @wnum4

答案 3 :(得分:-1)

选择查询是在分配之前编写的,请按如下所示修改查询:-

DECLARE @wnum AS int SET @wnum = 49
DECLARE @wnum3 AS int
DECLARE @wnum4 AS int

SELECT @wnum3
SET @wnum3 = CASE WHEN @wnum >=50 THEN 1 WHEN @wnum <50 THEN @wnum+3 END
SELECT @wnum3