我正在编写一个触发器,它从表中获取自动增量变量的值。这个想法是从另一个保留已批准 ID 的表中检查此值。如果找到匹配项,则允许交易,否则拒绝交易。
但是令我惊讶的是,在触发器本身中,此字段的值会根据捕获值的位置而变化。
以下是触发脚本。当 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