Автоматическое увеличение значения переменной внутри триггера - PullRequest
0 голосов
/ 10 марта 2019

Я пишу Trigger следующим образом, который выбирает значение переменной автоматического увеличения из таблицы.Идея состоит в том, чтобы проверить это значение из другой таблицы, в которой хранятся утвержденные идентификаторы.Если совпадение найдено, транзакция разрешается, в противном случае она отклоняется.

Однако, к моему удивлению, в самом триггере значение этого поля изменяется в зависимости от того, где это значение зафиксировано.

Ниже приведен скрипт запуска.Когда значение AutoIndex отображается в первом RAISERROR, оно остается стабильным, однако, когда то же значение ссылается во втором экземпляре, то есть в IF BLOCK, оно продолжает изменяться.Пожалуйста, сообщите, где я иду не так.

ALTER TRIGGER [dbo].[WIZ_TRG_DOC_APPROVAL]
ON [dbo].[InvNum]
FOR INSERT, UPDATE
AS
BEGIN
DECLARE @AID AS INT
DECLARE @APRV AS BIT
DECLARE @Msg AS VARCHAR(100)
DECLARE @DOCST AS INT
DECLARE @ORD AS VARCHAR(10)
DECLARE @INV AS VARCHAR(10)

SELECT @AID = AutoIndex, @DOCST = DocState FROM inserted

Set @Msg = 'This document is not fully authorised. ' + ' AutoIndex = ' + convert(varchar(10), @AID)
        RAISERROR (@Msg, 16, 1);

IF @DOCST = 4
BEGIN
    IF NOT EXISTS (SELECT Dir__Approve FROM WIZ_DOC_APPROVAL WHERE DocIndex = @AID)
        SET @APRV = 0  --Approval record has not been created yet
    ELSE 
        SELECT @APRV = ISNULL(Dir__Approve, 0) FROM WIZ_DOC_APPROVAL WHERE DocIndex = @AID

    IF @APRV <> 1
    BEGIN
        Set @Msg = 'This document is not fully authorised. ' 
                    + ' AutoIndex = ' + convert(varchar(10), @AID)
        RAISERROR (@Msg, 16, 1);
        ROLLBACK;
    END
END
END
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...