2

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

4

1 回答 1

1

您不能在WHERE子句中分配。您可以在SELECT子句中:

DECLARE @tmpvar varchar(5)
....

SELECT @tmpvar =
      CASE WHEN (some condition here)
             THEN 'YES'
             ELSE 'NO'
      END,
....
FROM some_table
WHERE 
....

但前提是您没有同时尝试数据检索。此外,如果结果集中有超过 1 行,则很难定义哪些行会影响结果,除非您有一个ORDER BY子句:

如果 SELECT 语句返回多个值,则为变量分配最后一个返回的值。


您可能已经注意到,SQL=用于赋值、比较和引入别名。哪一个是由=出现的位置决定的。在WHERE从句中,=只能是比较。

于 2013-07-25T12:21:51.383 回答