将列作为函数参数传递

时间:2018-05-24 02:49:20

标签: sql-server tsql

我遇到了将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”。

为什么不能受约束?

非常感谢!

1 个答案:

答案 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”