我有一个我无法解决的代码。有人可以帮帮我吗?
代码:
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上运行)
答案 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