有人可以解释为什么此查询将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
答案 0 :(得分:3)
要在设置变量之前进行选择。在SET
和SELECT
行之间切换:
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