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

时间:2012-04-03 08:06:39

标签: sql-server-2008 tsql

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

的查询

由于 大卫

2 个答案:

答案 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创建了临时表的等价物,并且后续查询都可以访问这些字段,因此只需引用内部函数中的那些字段。

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