SQL Server触发器和事务问题

时间:2016-07-27 12:40:24

标签: sql-server triggers transactions

我有一个存储过程,它运行并插入10个单独的表中。在第一个表格中,我有一个“插入后”触发器。但是,存储过程包装在事务中,并且只有在插入到所有10个表中后才会提交。

我的问题是,只有存储过程提交后,我的触发器才会触发?目前我遇到的问题是通过asp.net应用程序插入记录很好,但触发器没有触发(触发器只捕获插入的行)

ALTER TRIGGER [dbo].[trProductAllergenUpdate]
ON [dbo].[ProductAllergen]
AFTER INSERT 
AS 
BEGIN
    SET NOCOUNT ON;

    INSERT INTO AUDIT_PRODUCT (ProductID, Portal_Table, Portal_Column, AuditDescription, UpdateDateTime, OldValue, NewValue)
        SELECT 
            I.ProductID, 'ProductAllergen', 'AllergenStatusID', 
            'Allergen - ' + AT.AllergenType, Getdate(), 
            AS2.AllergenStatus, AS1.AllergenStatus
        FROM 
            Inserted I 
        INNER JOIN 
            (SELECT PA2.* 
             FROM ProductAllergen PA2
             INNER JOIN
                 (SELECT 
                      ProductID, AllergenTypeID, MAX(productAllergenID) [ProductAllergenID]
                  FROM ProductAllergen
                  WHERE isLive = 0 
                  GROUP BY ProductID, AllergenTypeID) X ON PA2.ProductAllergenID = X.ProductAllergenID  
            ) OLD ON OLD.ProductID = I.ProductID 
                  AND OLD.AllergenTypeID = I.AllergenTypeID
        INNER JOIN 
            ProductAllergen NEW ON NEW.ProductID = OLD.ProductID 
                                AND NEW.AllergenTypeID = OLD.AllergenTypeID
        INNER JOIN 
            AllergenType AT ON I.AllergenTypeID = AT.AllergenTypeID
        INNER JOIN 
            AllergenStatus AS1 ON NEW.AllergenStatusID = AS1.AllergenStatusID
        INNER JOIN 
            AllergenStatus AS2 ON OLD.AllergenStatusID = AS2.AllergenStatusID
        WHERE 
            New.isLive = 1
            AND OLD.AllergenStatusID <> NEW.AllergenStatusID
END

0 个答案:

没有答案