SQL Server语法错误消息:156,级别:15,状态:1

时间:2017-03-20 05:05:48

标签: sql-server tsql stored-procedures syntax sql-server-2016

我正在尝试更改以下存储过程,但是当我尝试更改过程时出现语法错误。

  

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客户端。

1 个答案:

答案 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