我有一个CTE返回多行的查询,我想为返回的每一行执行一个Function。 有可能,我在google上查了一下,它说使用临时表来填充结果。我只想确认
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返回的每一行运行该函数,并将结果用作CTE
用于另一个同时使用CTEs
由于 大卫
答案 0 :(得分:5)
你不能这样做:
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
答案 1 :(得分:0)
如果你想调用一个方法,那么你需要使用一个游标,但是如果你想调用一个函数,那么你应该可以通过连接来实现。 我可能会遗漏一些东西,但我不太清楚为什么你觉得你需要在这段代码中嵌入一个subselect。 CTE创建了临时表的等价物,并且后续查询都可以访问这些字段,因此只需引用内部函数中的那些字段。
也许如果你发布了你正在使用它的实际查询可能更有意义:)