Как прервать вставку нескольких строк в триггер - PullRequest
4 голосов
/ 27 апреля 2009

С SQL Server 2005. Я объявил триггер, который запускается «AFTER INSERT, UPDATE», в этом триггере я использую WHILE и CURSOR для цикла в строках таблицы INSERTED. Когда я нахожу строку, которая не соответствует определенному условию:

Я хочу, чтобы триггер выдавал ошибку и не вставлял ни одной строки, которая сработала, (даже те, которые уже удовлетворяли моему условию). <--- Я не знаю, как это сделать! </p>

Можете ли вы сказать мне, как я могу повысить ошибку и предотвратить вставку?

Ответы [ 2 ]

10 голосов
/ 27 апреля 2009

использовать откат

IF <some condition>
BEGIN
   RAISERROR ('condition doesn't satisfy something', 16, 1)
   ROLLBACK TRANSACTION
END
4 голосов
/ 27 апреля 2009

Я не уверен, какую логику вы используете в этом цикле курсора, но , если это вообще возможно , попробуйте заменить цикл курсора запросом:

if exists (select PK from INSERTED where .....)
BEGIN
    --from @SQLMenace's answer
    RAISERROR ('condition doesn't satisfy something', 16, 1)
    ROLLBACK TRANSACTION

END

курсор в триггере вызывает у меня плохое предчувствие: на ум приходят блокировка, блокировка и замедление ...

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...