无法将列传递给SQL用户函数

时间:2014-04-04 04:02:19

标签: sql sql-server

我的SELECT查询使用搜索的CASE表达式。在那个案例中,我称之为用户功能。我想从SELECT中传入该用户函数。

我们有多个SQL Server。在一台服务器上,此SQL失败,但在其他服务器上运行正常。

理论是服务器之间的兼容性问题。工作服务器的COMPATIBILITY_LEVEL为90.失败的服务器为80.

这是兼容性错误吗?

错误讯息:

  

第16行:Msg 102,Level 15,State 1:

     

UT'附近的语法不正确。

SQL代码(为SO伪造表格):

CREATE FUNCTION uf_TestFunction_table
(@Number Int)
RETURNS TABLE
    RETURN (SELECT UserId FROM [dbo].[User] WHERE [UserID] = @Number)
GO

SELECT TOP 1
UT.UserID, 
UT.Deleted,
CASE WHEN EXISTS(SELECT * FROM [dbo].[uf_TestFunction_table]([UT].[UserID])) THEN 1 ELSE 0 END AS FOO
FROM [dbo].[User] UT

2 个答案:

答案 0 :(得分:1)

你不能在select子句中使用表值函数,在你的查询中使用交叉应用就像内部联合一样。

从结果中使用案例作为您想要的输出......

答案 1 :(得分:1)

请仔细阅读此链接,返回TABLE的函数应该用作表格(即用于连接或子句之后)。

http://www.codeproject.com/Articles/167399/Using-Table-Valued-Functions-in-SQL-Server

你的代码应该如下,我还没有执行这些语句,只是修改了&粘贴。

SELECT TOP 1
UT.UserID, 
UT.Deleted,
CASE WHEN fun.UserId IS not null  THEN 1 ELSE 0 END AS FOO
FROM [dbo].[User] UT
left join [dbo].[uf_TestFunction_table]([UT].[UserID]) as fun on fun.UserId =UT.UserID