我有 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。请给我解决方案。