Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Откат триггера при не соблюдении условия / 2 сообщений из 2, страница 1 из 1
14.05.2002, 17:13
    #32030125
Александр
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Откат триггера при не соблюдении условия
Кинь-те пример правильного триггера на добавление, удаление, в которых бы проверялось соблюдение
некоего условия и в случае несоблюдения - откат.
Заранее спасиб
Я вот тут налабал (ещё только учусь), но чё-то не так, поскольку уникальный индекс вперёд срабатывает:


IF EXISTS (SELECT name FROM sysobjects WHERE name = 'tr_add' AND type = 'TR')
DROP TRIGGER tr_add
GO
CREATE TRIGGER tr_add ON t_tn
FOR INSERT
AS
DECLARE @newId INT, @tn INT, @nCntRow INT, @cSay VARCHAR(200)
SELECT @newId=i.id_tn, @tn=i.tn FROM t_tn t, inserted i WHERE t.id_tn=i.id_tn

IF @newId IS NOT NULL
BEGIN
SET @nCntRow=(SELECT COUNT(tn) FROM t_tn WHERE tn=@tn)
IF @nCntRow>1
BEGIN
ROLLBACK TRAN
SET @cSay=' Таб. номер '+RTRIM(CONVERT(CHAR(10), @tn))+' ужо есть!'
RAISERROR (@cSay,16,1)
END
END
ELSE
BEGIN
ROLLBACK TRAN
RAISERROR (' Откат триггера!',16,1)
END
...
Рейтинг: 0 / 0
14.05.2002, 19:31
    #32030129
Слон
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Откат триггера при не соблюдении условия
Оно и будет срабатывать, ибо по определению Constraints проверяются перед AFTER триггерами, но после INSTEAD-OF триггерами.

Цитата из BOL:
If constraints exist on the trigger table, they are checked after the INSTEAD OF trigger execution but prior to the AFTER trigger execution. If the constraints are violated, the INSTEAD OF trigger actions are rolled back and the AFTER trigger is not executed.
...
Рейтинг: 0 / 0
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Откат триггера при не соблюдении условия / 2 сообщений из 2, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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