对于从另一个CTE返回的每一行,在CTE内部调用一个用户定义的函数



我有一个返回多行的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创建了一个相当于临时表的字段,并且这些字段都可供后续查询访问,所以只需在内部函数中引用这些字段即可。

如果你发布了你正在使用的实际查询,也许会更有意义:)