使用params加入SQL Server UDF

时间:2014-08-07 08:50:14

标签: sql sql-server parameters

我有一个我无法解决的代码。有人可以帮帮我吗?

代码:

SELECT 
    s.* 
FROM 
    tabD d
    ,tabP p
    ,dbo.myFunc(d.col1) f 
    ,tabS s
WHERE 1=1
    and p.D_ID=d.ID
    and s.ID=f.ID

myFunc是一个返回表格的UDF(除其他外,包含列ID)

问题是,dbo.myFunc(d.col1)调用会导致错误

  

多部分标识符" d.col1"无法受约束。

如何重新排列代码才能正常工作?

(在SQL Server上运行)

2 个答案:

答案 0 :(得分:2)

使用APPLY将逐行参数传递到UDF

当然,使用ANSI-92样式连接也是理所当然的。混合APPLY和旧样式“join in the where子句”会让你头疼:甚至比不使用显式JOIN语法还要多

SELECT 
    s.* 
FROM 
    tabD d
    JOIN
    tabP p ON p.D_ID=d.ID
    CROSS APPLY
    dbo.myFunc(d.col1) f
    JOIN
    tabS s ON s.ID =f.ID

答案 1 :(得分:0)

可能这也有效

  SELECT 
    d.*,
    (Select P.Id from tabP P where P.ID = d.id) P,
    (Select S.ID from tabs S where S.ID = d.id) P

FROM 
    tabD d
    OUTER APPLY
    dbo.myFunc(d.col1) f
WHERE 1=1
    and P.ID=d.ID
    and S.ID=f.ID