У меня есть 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
Теперь эта процедура возвращает сообщение об ошибке для таблицы «Тест».Но мне нужно сохранить оставшуюся транзакцию до Триггера С. Пожалуйста, дайте мне решение для этого.