Sql 以表alias.column name作为参数调用内联UDF

Sql 以表alias.column name作为参数调用内联UDF,sql,sql-server,sql-server-2005,user-defined-functions,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”附近的语法不正确 谢谢您必须像这样使用交叉应用 select top 1000 a.*, b.

我有一个内联表值函数,希望从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”附近的语法不正确


谢谢

您必须像这样使用交叉应用

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
      )

你必须像这样使用交叉涂抹

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
      )

感谢您的快速回复,但我仍然收到相同的错误:“a”附近的语法不正确。sql似乎不喜欢我将a.列名传递给函数。它是一个内联表函数,返回一个表,我希望得到多个结果,这就是为什么我的初始sql使用在这种情况下,检查DB兼容模式。SQL Server 2008+需要为90或更高才能允许此操作。它在80秒内无法工作。目前正在sql 2005 server上运行,因此该设置是否相同?不一定,不。您检查了吗?请参阅感谢您的快速回复,但我仍然收到相同的错误:“a”附近的语法不正确。sql似乎不喜欢我将a.列名传递给函数。它是一个内联表函数,返回一个表,我希望得到多个结果,这就是为什么我的初始sql使用在这种情况下,检查DB兼容模式。SQL Server 2008+需要为90或更高才能允许此操作。它在80秒内无法工作。目前正在sql 2005 server上运行,因此该设置是否相同?不一定,不。您检查了吗?看见