powered by simpleCommunicator - 2.0.59     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Возращение результата работы триггера?
2 сообщений из 2, страница 1 из 1
Возращение результата работы триггера?
    #32016629
Саша Flex
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Народ, подскажите, пожалуйста, как вернуть результат работы триггера для анализа его работы. Т.е., например, имеются три подчинённые таблицы:
1) main_tbl,
2) parent_tbl,
3) chail_tbl .
При обновлении поля del_ в таблице parent_tbl через триггер (см. ниже) изменяется соответствующее поле в подчинённой таблице chail_tbl. UPDATE в chail_tbl по какой-то причине потерпело неудачу, триггер возвращает @kolRec=-1 (количество изм. строк). Изменение поля del_ в таблице parent_tbl вызвано в свою очередь UPDATE-триггером главной таблицы main_tbl. Выполняется откат всех изменеий для всех трёх таблиц (т.е. код ошибки должен передаваться снизу вверх). Да и вообще, неплохо было бы знать, что обновление не прошло, т.к. по такой-то причине триггер (а не что иное) сделал откат.

Заранее спасибо!

CREATE TRIGGER trig_ ON [dbo].[parent_tbl]
FOR UPDATE
AS
BEGIN
DECLARE @uni UNIQUEIDENTIFIER, @prnt_del BIT, @kolRec INTEGER, @upd_error INTEGER
SELECT @uni=i.id, @prnt_del=i.del_
FROM paren_tbl k INNER JOIN inserted i ON k.id= i.id
BEGIN TRAN
UPDATE chail_tbl SET del_ = @prnt_del WHERE id=@uni
SET @kolRec=@@ROWCOUNT
SET @upd_error = @@ERROR
IF @upd_error = 0
COMMIT TRAN
ELSE
BEGIN
ROLLBACK TRAN
SET @kolRec=-1
END
END
...
Рейтинг: 0 / 0
Возращение результата работы триггера?
    #32016635
GreenSunrise
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
По-моему, в таких случаях надо ставить автоматический откат транзакции SET XACT_ABORT ON: все само откатится и ошибка приползет на клиента. Если установка этой опции нежелательна, то в триггере надо делать проверку @@error и самостоятельно выбрасывать ошибку и откатывать транзакцию.

if @@error <> 0
begin
raiserror ('Trigger tr1 generated some error', 16, 1)
rollback
end

Можно еще и родной код случившейся ошибки добавить, если есть желание.
...
Рейтинг: 0 / 0
2 сообщений из 2, страница 1 из 1
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Возращение результата работы триггера?
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]