在 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
.
我有一个 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
.