使用表alias.column名称作为参数调用Inline UDF

时间:2012-02-20 16:31:51

标签: sql sql-server sql-server-2005 user-defined-functions

我有一个内联表值函数,我想从select传递一个列,但会使用表别名。

例如:

select top 1000 a.*, b.* from item a
LEFT JOIN itemList b on a.item_id = b.item_id
where a.item_id in (SELECT * FROM dbo.fn_GIVFUC('1234567', a.item_id))

结果:'a'附近的语法不正确。

由于

1 个答案:

答案 0 :(得分:5)

你必须像这样使用CROSS APPLY

select top 1000  
   a.*, b.* 
from 
  item a
  CROSS APPLY
  dbo.fn_GIVFUC('1234567', a.item_id) c ON a.item_id = c.item_id
  LEFT JOIN 
  itemList b on a.item_id = b.item_id

这意味着您可能会获得重复项,因此可能会工作。我无法测试

select top 1000  
   a.*, b.* 
from 
  item a
  LEFT JOIN 
  itemList b on a.item_id = b.item_id
WHERE
  EXISTS (
       SELECT *
       FROM dbo.fn_GIVFUC('1234567', a.item_id)
       -- may need this WHERE a.item_id = c.item_id
      )