我正在尝试更改以下存储过程,但是当我尝试更改过程时出现语法错误。
Msg 156,Level 15,State 1 关键字“ELSE”附近的语法不正确。 (第24行)
最初,我错误地执行了InsLoginAttempts
,但我更正了。
Microsoft语言参考似乎没有任何帮助https://msdn.microsoft.com/en-us/library/ms182717.aspx
SET ANSI_NULLS ON
GO
SET ANSI_NULLS ON
GO
ALTER PROCEDURE dbo.LogInUser
(@UserID varchar(50),
@Password varchar(15)
)
AS
BEGIN
SET NOCOUNT ON
DECLARE @UserExists varchar(50)
SET @UserExists = (SELECT UserID FROM Users WHERE UserID = @UserID)
DECLARE @CheckPassword varchar(15)
SET @CheckPassword = (SELECT Password FROM Users WHERE UserID = @UserID)
BEGIN
IF @UserExists IS NOT NULL
BEGIN
IF @Password = @CheckPassword
SELECT 'True' AS LoggedIn;
EXEC InsLoginAttempts @SPUserID = @UserID, @SPPassword = @Password, @Comment = 'Success';
ELSE
SELECT 'False' AS LoggedIn;
EXEC InsLoginAttempts @SPUserID = @UserID, @SPPassword = @Password, @Comment = 'Failed password attempt';
END
ELSE
SELECT 'False' AS LoggedIn;
EXEC InsLoginAttempts @SPUserID = @UserID, @SPPassword = @Password, @Comment = 'Failed username and password attempt';
END
END
GO
这显然是语法错误,但它在哪里?
编辑:另外,我不知道是否值得注意,但我也使用SQLPro for SQL Server客户端。答案 0 :(得分:3)
您的脚本缺少BEGIN和END
SET ANSI_NULLS ON
GO
SET ANSI_NULLS ON
GO
ALTER PROCEDURE dbo.LogInUser(
@UserID varchar(50),
@Password varchar(15)
)
AS
BEGIN
SET NOCOUNT ON
DECLARE @UserExists varchar(50)
SET @UserExists = (SELECT UserID FROM Users WHERE UserID = @UserID)
DECLARE @CheckPassword varchar(15)
SET @CheckPassword = (SELECT Password FROM Users WHERE UserID = @UserID)
BEGIN
IF @UserExists IS NOT NULL
BEGIN
IF @Password = @CheckPassword
BEGIN
SELECT 'True' AS LoggedIn;
EXEC InsLoginAttempts @SPUserID = @UserID, @SPPassword = @Password, @Comment = 'Success';
END
ELSE
BEGIN
SELECT 'False' AS LoggedIn;
EXEC InsLoginAttempts @SPUserID = @UserID, @SPPassword = @Password, @Comment = 'Failed password attempt';
END
END
ELSE
BEGIN
SELECT 'False' AS LoggedIn;
EXEC InsLoginAttempts @SPUserID = @UserID, @SPPassword = @Password, @Comment = 'Failed username and password attempt';
END
GO