Синтаксическая ошибка в этой хранимой процедуре, что не так? - PullRequest
0 голосов
/ 09 декабря 2018

Я пытаюсь написать хранимую процедуру, которая должна вставлять данные в таблицу только для записей в диапазоне от 0 до 350.

В качестве параметра он получает два целых числа

CREATE PROCEDURE SP_MesaEnRango
    (@nroMesa INT,
     @cantidadVotantes INT)
AS
BEGIN 
    IF @nroMesa IS NOT NULL OR @cantidadVotantes IS NOT NULL OR
       @cantidadVotantes < 0 OR @cantidadVotantes > 350
    BEGIN 
        DECLARE @errorMessage NVARCHAR(50);

        BEGIN TRANSACTION;
        BEGIN TRY
            INSERT INTO Mesas (nroMesa, cantidadVotantes)
            VALUES (@nroMesa, @cantidadVotantes);
        END TRY
        BEGIN CATCH
            SET @errorMessage = 'ERROR';

            IF @@TRANCOUNT > 0
            BEGIN 
                ROLLBACK TRANSACTION;
            END;
        END CATCH;

        IF @@TRANCOUNT > 0
        BEGIN 
            COMMIT TRANSACTION;
        END;
    END;

Я получаю синтаксическую ошибку рядом с ';'

1 Ответ

0 голосов
/ 09 декабря 2018

Вам не хватает END в самом конце, чтобы завершить тело процедуры.Если вы делаете отступы последовательно и сохраняете свои BEGIN s и END в очереди, вам будет легче обнаружить подобные проблемы.Вот переформатированная версия вашего кода с добавленным пропущенным END:

CREATE PROCEDURE SP_MesaEnRango
    (@nroMesa int,
    @cantidadVotantes int)
AS
BEGIN
    IF @nroMesa IS NOT NULL OR
        @cantidadVotantes IS NOT NULL OR
        @cantidadVotantes < 0 OR
        @cantidadVotantes > 350
    BEGIN
        DECLARE @errorMessage nvarchar(50);

        BEGIN TRANSACTION;

        BEGIN TRY
            INSERT INTO Mesas (nroMesa,cantidadVotantes)
            VALUES (@nroMesa,@cantidadVotantes);
        END TRY

        BEGIN CATCH
            SET @errorMessage = 'ERROR';
            IF @@TRANCOUNT > 0
            BEGIN 
                ROLLBACK TRANSACTION;
            END
        END CATCH

        IF @@TRANCOUNT > 0
        BEGIN 
            COMMIT TRANSACTION;
        END
    END
END
...