我遇到了将ta.customer_no作为参数传递给生成表的函数的问题,我正在加入ta。
SELECT
ta.customer_no,
ta.first_name,
tb.company_name
FROM
table01 ta
JOIN
dbo.FUNC01(ta.customer_no) tb ON ta.customer_no = tb.customer_no;
错误:
Msg 4104,Level 16,State 1,Line 13
无法绑定多部分标识符“ta.customer_no”。
为什么不能受约束?
非常感谢!
答案 0 :(得分:1)
我认为您应该使用“交叉申请”而不是“加入”,如下所示
SELECT
ta.customer_no,
ta.first_name,
tb.company_name
FROM table01 ta
CROSS APPLY dbo.FUNC01( ta.customer_no ) tb
WHERE ta.customer_no=tb.customer_no;
至于为什么“不能绑定”,它与SQL Engine的处理逻辑顺序有关。简而言之,“Join”运算符在“Select”运算符之前被处理,因此“Join”运算符无法识别“ta.customer_no”