我正在尝试在SQL Server上编写一个SELECT
语句,该语句根据条件显示项目,我在随后的WHERE
子句中提供了该语句。
以下是我试图编写的简化版本。
DECLARE @tmpvar varchar(5)
....
SELECT @tmpvar,
....
FROM some_table
WHERE
....
and @tmpvar =
CASE WHEN (some condition here)
THEN 'YES'
ELSE 'NO'
END
上面的代码执行成功,但是当我检查@tmpvar
的值时,它仍然是未分配的。
我想知道我使用的语法是否有错误。如果是这样,使用给定条件在SELECT
语句中分配变量的正确方法是什么?如果这个问题多余,请事先道歉。
答案 0 :(得分:1)
您无法在WHERE
子句中进行分配。您可以在SELECT
子句:
DECLARE @tmpvar varchar(5)
....
SELECT @tmpvar =
CASE WHEN (some condition here)
THEN 'YES'
ELSE 'NO'
END,
....
FROM some_table
WHERE
....
但前提是您还没有同时尝试数据检索。此外,如果结果集中有多于一行,那么哪些行会影响结果的定义很差,除非你有一个ORDER BY
子句:
如果SELECT语句返回多个值,则为变量分配返回的最后一个值。
您可能已经注意到,SQL使用=
进行分配,比较和引入别名。哪一个取决于=
出现的位置。在WHERE
子句中,=
只能进行比较。