在 where 子句中使用函数生成的列

Using a function-generated column in the where clause

我有一个 SQL 查询,它调用存储的 SQL 函数,我想这样做:

SELECT    dbo.fn_is_current('''{round}''', r.fund_cd, r.rnd) as [current]
FROM      BLAH
WHERE     current = 1

select 工作正常,但是,它不知道 "current"。即使(没有 WHERE)它生成的数据确实有 "current" 列,而且它是正确的。

所以,我假设这是一个符号问题。

您不能在 where 子句中使用来自 select 的别名(甚至不能在同一个 select 中再次使用)。只需使用子查询:

SELECT t.*
FROM (SELECT dbo.fn_is_current('''{round}''', r.fund_cd, r.rnd) as [current]
      FROM BLAH
     ) t
WHERE [current] = 1;

注意:current 是一个非常糟糕的列名,因为它是一个保留字(至少在许多数据库中,包括 SQL 服务器)。定义游标时使用该词。使用其他内容,例如 currval.