首页 > 解决方案 > IF...ELSE 子句的语法不正确

问题描述

我有一个非常简单的查询,例如:

BEGIN TRY
BEGIN TRAN;
    DECLARE @CurrentPassword VARCHAR(255) = (SELECT TOP 1 [Password] 
                                             FROM Employee 
                                             WHERE @EmpGuid = EmpGuid)
    IF (@Password = @CurrentPassword)
        UPDATE [Employee] 
        SET [Password] = @NewPassword 
        WHERE @EmpGuid = EmpGuid

    SELECT 1;
    ELSE
        SELECT 2;

    COMMIT TRAN
END TRY
BEGIN CATCH
    ROLLBACK TRAN
END CATCH

但我真的不知道为什么在我的else条款中我得到

'ELSE' 附近的语法不正确

我究竟做错了什么?问候

标签: tsql

解决方案


你想在 之后有多个语句IF,你必须使用一个BEGIN .... END块 - 像这样:

BEGIN TRY
BEGIN TRAN;
    DECLARE @CurrentPassword VARCHAR(255) = (SELECT TOP 1 [Password] 
                                             FROM Employee 
                                             WHERE @EmpGuid = EmpGuid)
    IF (@Password = @CurrentPassword)
    BEGIN     --- you need a *BEGIN* here!!!
        UPDATE [Employee] 
        SET [Password] = @NewPassword 
        WHERE @EmpGuid = EmpGuid

        SELECT 1;
    END        --- and the *END* for your new *BEGIN*
    ELSE
        SELECT 2;

    COMMIT TRAN
END TRY
BEGIN CATCH
    ROLLBACK TRAN
END CATCH

推荐阅读