2014-04-04 26 views
1

我的SELECT查詢使用搜索的CASE表達式。在這種情況下,我稱之爲用戶功能。我想從SELECT中傳遞給用戶函數一個值。無法將列傳遞到SQL用戶函數

我們有多個SQL Server。在一臺服務器上,該SQL失敗,但在其他服務器上運行良好。

該理論是服務器之間的兼容性問題。工作服務器有COMPATIBILITY_LEVEL爲90.發生故障的服務器爲80.

這是兼容性錯誤嗎?

錯誤消息:

線16:消息102,級別15,狀態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 

回答

1

請通過此鏈接,它返回表應作爲表(即用於加入或語句之後)功能。

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 
1

在SELECT子句中不能使用表值函數,insted的利用跨在查詢這會像接頭內部適用。

從結果中使用的情況下爲您所需的輸出...