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

时间:2016-03-07 22:01:16

标签: sql function virtual-column

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

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

选择工作正常,但是,它不知道“当前”。即使(没有WHERE)它生成的数据也有“当前”列,并且它是正确的。

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

1 个答案:

答案 0 :(得分:4)

您不能使用select子句中where的别名(甚至可以使用同一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 Server)。定义游标时使用该词。使用其他内容,例如currval