我有一个返回多行的CTE查询,我想对返回的每一行执行一个Function。我在谷歌上查了一下,它说可以使用临时表来填充结果。我只想确认
with job_list as ( select JOB_ID,CREATED_DATE from job_table) ,
app_list as (select APP_ID from job_list jobs, dbo.fnGetApp(jobs.JOB_ID,9))
select * from job_list, app_list
这不是确切的问题,我已经简化了以了解我面临的问题。
dbo.fnGetApp
是一个函数,它接受两个参数varchar和int,并返回一个单列表(varchar APP_ID
)
错误-无法绑定多部分标识符"jobs.JOB_ID"。
我想为job_list
CTE返回的每一行运行函数,并将结果用作另一个使用CTEs
的查询的CTE
谢谢David
你不能这样做吗:
with job_list as
(
select
JOB_ID,
CREATED_DATE
from
job_table
),
app_list as
(
select
APP_ID
from
job_list AS jobs
CROSS APPLY dbo.fnGetApp(jobs.JOB_ID,9) AS something
)
select * from
job_list,
app_list
如果你想调用一个方法,那么你需要使用一个游标,但如果你想要调用一个函数,那么你应该能够通过联接来实现这一点。我可能遗漏了一些东西,但我不太确定为什么您觉得需要在这段代码中嵌入一个子select。CTE创建了一个相当于临时表的字段,并且这些字段都可供后续查询访问,所以只需在内部函数中引用这些字段即可。
如果你发布了你正在使用的实际查询,也许会更有意义:)