在SQL SERVER上的SELECT语句中有条件地分配变量

时间:2013-07-25 12:18:39

标签: sql-server

我正在尝试在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语句中分配变量的正确方法是什么?如果这个问题多余,请事先道歉。

1 个答案:

答案 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子句中,=只能进行比较。