'SQL Server - Incorrect syntax near ELSE [closed]

I'm having a problem with my SQL code for tickets orders, everything was working, until I added those UPDATE statements. After I added UPDATE statements every ELSE is being underlined with definition Incorrect syntax near ELSE. Is there anything bad with the code syntax itself or could the update statements be made by trigger? I'd be glad if anyone helped:)

CREATE PROCEDURE ObjednaniVstupenek(@pocetNormal int, @pocetVip int, @akceID int, @email nvarchar(50))
AS
BEGIN
    IF EXISTS(SELECT TOP (@pocetVip) * FROM Vstupenky WHERE Platna = 0 AND Verze = 'VIP')
        IF EXISTS(SELECT TOP (@pocetNormal) * FROM Vstupenky WHERE Platna = 0 AND Verze = 'normal')
            IF EXISTS(SELECT * FROM Zakaznici WHERE Email = @email)
                IF EXISTS(SELECT * FROM Akce WHERE AkceID = @akceID)
                    INSERT INTO Objednavky(Zaplaceno, ZakazniciID)
                    VALUES(1, (SELECT ZakazniciID FROM Zakaznici WHERE Email=@email))
                    UPDATE Vstupenky
                    SET ObjednavkyID = SCOPE_IDENTITY(), Platna = 1
                    WHERE Platna = 0 AND Verze = 'VIP' AND VstupenkyID in
                    (
                        select top (@pocetVip) * from Vstupenky
                    )
                    UPDATE Vstupenky
                    SET ObjednavkyID = SCOPE_IDENTITY(), Platna = 1
                    WHERE Platna = 0 AND Verze = 'normal' AND VstupenkyID in
                    (
                        select top (@pocetNormal) * from Vstupenky
                    )
                ELSE
                    PRINT 'Taková akce neexistuje'
            ELSE
                PRINT 'Takový email není zaregistrovaný. Prosím, nejdřív se registrujte.'
        ELSE
            PRINT 'Není dostatek normálních vstupenek'
    ELSE
    PRINT 'Není dostatek VIP vstupenek'
END

Thank you for any help



Solution 1:[1]

If statements need begin/end if they "contain" more than 1 SQL statements.

This should work:

CREATE PROCEDURE ObjednaniVstupenek(@pocetNormal int, @pocetVip int, @akceID int, @email nvarchar(50))
AS
BEGIN
    IF EXISTS(SELECT TOP (@pocetVip) * FROM Vstupenky WHERE Platna = 0 AND Verze = 'VIP')
        IF EXISTS(SELECT TOP (@pocetNormal) * FROM Vstupenky WHERE Platna = 0 AND Verze = 'normal')
            IF EXISTS(SELECT * FROM Zakaznici WHERE Email = @email)
                IF EXISTS(SELECT * FROM Akce WHERE AkceID = @akceID)
                    begin
                        INSERT INTO Objednavky(Zaplaceno, ZakazniciID)
                        VALUES(1, (SELECT ZakazniciID FROM Zakaznici WHERE Email=@email))
                        UPDATE Vstupenky
                        SET ObjednavkyID = SCOPE_IDENTITY(), Platna = 1
                        WHERE Platna = 0 AND Verze = 'VIP' AND VstupenkyID in
                        (
                            select top (@pocetVip) * from Vstupenky
                        )
                        UPDATE Vstupenky
                        SET ObjednavkyID = SCOPE_IDENTITY(), Platna = 1
                        WHERE Platna = 0 AND Verze = 'normal' AND VstupenkyID in
                        (
                            select top (@pocetNormal) * from Vstupenky
                        )
                    end
                ELSE
                    PRINT 'Taková akce neexistuje'
            ELSE
                PRINT 'Takový email není zaregistrovaný. Prosím, nejd?ív se registrujte.'
        ELSE
            PRINT 'Není dostatek normálních vstupenek'
    ELSE
    PRINT 'Není dostatek VIP vstupenek'
END

Sources

This article follows the attribution requirements of Stack Overflow and is licensed under CC BY-SA 3.0.

Source: Stack Overflow

Solution Source
Solution 1 Eduard Uta