我真的可以使用一些幫助編寫使用以下邏輯多語句表值函數:T-SQL多語句表值函數
- 接受一個varchar參數爲輸入
- 如果參數與A開始,運行SELECT語句
- 如果沒有行返回,運行SELECT語句
- 如果該參數不具有啓動,運行SELECT語句
- 如果沒有行返回,運行select語句
- 返回一個輸出表,該表將結果集的一個從取決於參數
到目前爲止上面,這是我有:
CREATE FUNCTION dbo.CheckAccess
(@UserName varchar(30))
RETURNS @AccessTable TABLE (User varchar(max), Access varchar(max))
AS
BEGIN
IF LEFT(@UserName,1) = 'A'
INSERT INTO @AccessTable
SELECT
CASE
WHEN EXISTS (SELECT User, Access FROM dbo.AccessTable1 WHERE User = @UserName)
THEN (SELECT User, Access FROM dbo.AccessTable1 WHERE User = @UserName)
ELSE (SELECT @UserName User, 'No Access' Access)
END
ELSE
INSERT INTO @AccessTable
SELECT
CASE
WHEN EXISTS (SELECT User, Access FROM dbo.AccessTable2 WHERE User = @UserName)
THEN (SELECT User, Access FROM dbo.AccessTable2 WHERE User = @UserName)
ELSE (SELECT @UserName User, 'No Access' Access)
END
RETURN
END;
不知道我很想念這裏,但我收到了以下錯誤:
Msg 116, Level 16, State 1, Procedure CheckAccess, Line 90
Only one expression can be specified in the select list when the subquery is not introduced with EXISTS.
Msg 116, Level 16, State 1, Procedure CheckAccess, Line 92
Only one expression can be specified in the select list when the subquery is not introduced with EXISTS.
Msg 213, Level 16, State 1, Procedure CheckAccess, Line 11
Column name or number of supplied values does not match table definition.
我知道如何在存儲過程中做到這一點很容易,使用臨時表,但由於它們一在功能上不是一個選項,我有點困難。如果有人可以提供一些建議,我會很感激。提前致謝。