Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 Как в триггере отменить вставку, не используя rollback?  [new]
no-insert
Guest
Ситуация: есть некая транзакция, затрагивающая несколько таблиц. Часть вносимых в транзакции изменений обязательны, часть - нет. Необходимо отменить некоторые из необязательных изменений (вставку в некоторую таблицу), сохранив обязательные изменения - по этой причине выброс в триггере исключения и откат транзакции не подходят. Можно ли как-то в триггере сделать так, чтобы вставка в таблицу просто молча пропускалась? SQL Server 2008.
9 дек 13, 13:42    [15264393]     Ответить | Цитировать Сообщить модератору
 Re: Как в триггере отменить вставку, не используя rollback?  [new]
Crimean
Member

Откуда:
Сообщений: 13147
если буквально то INSTEAD OF триггер. но то что вы хотите сделать - очень, очень и очень плохо
куда правильнее вставлять по 1 записи, "кривые" - таки ролбечить, но "снаружи" это все ловить через TRY
а еще правильнее - сначала, до вставки, решить что "хорошо", а что "плохо" и вставлять только то, что "хорошо"
9 дек 13, 13:46    [15264422]     Ответить | Цитировать Сообщить модератору
 Re: Как в триггере отменить вставку, не используя rollback?  [new]
просто вышел погулять
Guest
Вам нужен INSTEAD OF триггер
9 дек 13, 13:47    [15264436]     Ответить | Цитировать Сообщить модератору
 Re: Как в триггере отменить вставку, не используя rollback?  [new]
no-insert
Guest
Crimean,

проблема в том, что вставка осуществляется внешним и не нашим приложением, и вмешаться в его логику нет возможности. Но у приложения БД доступна для изменений в рамках разумного. Вот и пытаемся как-то допилить это хозяйство.
А instead of мне и самому не очень нравится. Возможно, обойдется сервисом/джбом, подчищающим ненужные вставки (их не очень много).
9 дек 13, 13:51    [15264469]     Ответить | Цитировать Сообщить модератору
 Re: Как в триггере отменить вставку, не используя rollback?  [new]
Crimean
Member

Откуда:
Сообщений: 13147
компромисс - вставлять "не туда". а "туда" - переносить тем самым "джобом", о котором вы говорите
вплоть до инициации "того самого" джоба триггером на "не туда" табличке :)
9 дек 13, 13:53    [15264497]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить