我的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
答案 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