Ich habe eine Funktion zu überprüfen, ob Benutzer authentifiziert sind, aber das Ergebnis ist nicht korrekt:SQL Server-Funktion Rückkehr unerwartetes Ergebnis
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
Wenn ich zu laufen versuchen:
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()
ich dieses Ergebnis zu erhalten :
==> die Funktion finden nicht die Linie
-201
==> findet die Abfrage eine Zeile
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
Irgendwelche Hinweise?
Ich versuchte mit EXISTS ... Select count (*) ...> 0 aber das Problem ist in der Funktion, weil die Abfrage korrekt ist und wenn ich es ausführen, gibt das korrekte Ergebnis –