我有一個函數來檢查,如果用戶進行身份驗證,但結果是不正確的:SQL Server函數返回意外的結果
CREATE FUNCTION [dbo].[IsAuthorized]
(@UserToken nvarchar(250),
@UserCode nvarchar(250))
RETURNS int
AS
BEGIN
IF (SELECT [User].UserId
FROM [User]
INNER JOIN UserLogin ON [User].UserId = UserLogin.UserId
WHERE [User].UserCode = @UserCode
AND UserLogin.UserToken = @UserToken
AND UserLogin.UserTokenExpiration > GETDATE()) > 0
RETURN 1;
IF NOT EXISTS (SELECT [User].UserId
FROM [User]
WHERE [User].UserCode = @UserCode)
RETURN -201; -- User does not exist
IF NOT EXISTS (SELECT [User].UserId
FROM [User]
INNER JOIN UserLogin ON [User].UserId = UserLogin.UserId
WHERE [User].UserCode = @UserCode
AND UserLogin.UserToken = @UserToken)
RETURN -202; -- Token is not valid
IF EXISTS (SELECT [User].UserId
FROM [User]
INNER JOIN UserLogin ON [User].UserId = UserLogin.UserId
WHERE [User].UserCode = @UserCode
AND UserLogin.UserToken = @UserToken
AND UserLogin.UserTokenExpiration < GETDATE())
RETURN -203; -- Token expired
RETURN 0;
END
當我嘗試運行:
DECLARE @UserCode nvarchar(250) = N'7C6898E2-0529-4C3F-B4B2-FA69087CDF4A';
DECLARE @UserToken nvarchar(250)= N'DE3B193D-65BC-4F75-970A-932C9F825D81';
SELECT dbo.IsAuthorized(@UserCode,@UserToken) as FunctionResult
SELECT *
FROM [User]
INNER JOIN UserLogin ON [User].UserId = UserLogin.UserId
WHERE
[User].UserCode = @UserCode
AND UserLogin.UserToken = @UserToken
AND UserLogin.UserTokenExpiration > GETDATE()
我得到這樣的結果:
==>函數沒有找到行
-201
==>查詢找到一個線
4 7C6898E2-0529-4C3F-B4B2-FA69087CDF4A Ahmed ALOUI TROY [email protected] 0 0 1 0 /Ressources/img/aloui.jpg 4 73828562FADE36DD6774C6854F52965C CC6CA2373C2240743D051352BC3AF3C0 DE3B193D-65BC-4F75-970A-932C9F825D81 2016-11-25 16:02:12.083
任何線索?
我試過使用EXISTS ... select count(*)...> 0但問題出在函數上,因爲查詢是正確的,當我運行它時它返回正確的結果 –