0

我有 3 张桌子,比如说 A 表、B 表和 C 表。

我在表 A 上有一个触发器,它将数据插入到表 B 中,我在表 b 上也有一个触发器,它将数据输入到表 C 中。在表 C 上,有一个执行过程的触发器。

任务是,即使在对表 C 的操作过程中发生了某些事情,即(发生任何错误),对表 A、B 和 C 的操作也应该继续并完成。问题是如果程序出现问题,表 A、B 和 C 上的操作也会中止。

我的表 C 触发器是:

CREATE TRIGGER [dbo].[Trg_Mst_TableC] 
ON [dbo].[TableC]
FOR UPDATE 
AS 
BEGIN
    DECLARE @flg_Error INT
    SET @flg_Error  = 0

    DECLARE @SLQString NVARCHAR(MAX) 

    SELECT @SLQString  = 'Text Message' 

    SAVE TRANSACTION MySavePoint                                    

    IF ISNULL(@SLQString, '') <> '' 
    BEGIN 
        EXEC spMsc_SendMsg 'Test', 'POST',  @SLQString

        IF @@error <> 0 BEGIN 
            ROLLBACK TRAN MySavePoint
        END 
    END
END

这是我的程序:

CREATE PROCEDURE [dbo].[spMsc_SendMsg]  
     @msg_type NVARCHAR(50),  
     @getpost NVARCHAR(20),  
     @msg_txt NVARCHAR(MAX)  
AS  
BEGIN  
    SET NOCOUNT ON 

    SAVE TRANSACTION MySavePoint

    CREATE TABLE Test (XXX NVARCHAR(MAX))

    SELECT @msg_type, @getpost, @msg_txt
END   

现在,此过程为“测试”表返回错误消息。但我需要将剩余的交易保存到触发器 C。请给我解决方案。

4

1 回答 1

0

除了使用事务和回滚,您可以使用 TRY CATCH 块来控制在特定触发器中发生错误时您希望发生的事情。

于 2019-07-03T13:24:54.690 回答