Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 Помогите разобраться с триггерами плз.  [new]
abrashka
Member

Откуда:
Сообщений: 517
День добрый!

Существует таблица MyTable и триггер, который записывает ID всех измененных строк в этой таблице в таблицу AuditTable .
Т.е. если выполняю:
update table MyTable
set Name='abc'
where ID>1000 and ID<2000

То в таблицу AuditTable записываются все ID от 1000 до 2000 строк, которые были изменены.
Интересует несколько вопросов:
1) Если в приведенном выше примере было изменено 1000 строк, то триггер выскакивает 1000 раз, или один раз?
2) И апдейт таблицы и запись в идет в одной транзакции? Т.е. если апдейт строки с ID=444 по какой либо причине не выполнился, то идет откат и всех выполненых изменений и в MyTable и в AuditTable тоже не произойдет никаких изменений?
3) Если триггер не просто записывает ID измененной строки, а производит какое-либо "тяжелое" вычисление и записывает результат в AuditTable , то MyTable будет заблокирована до тех пор, пока не закончится и апдейт MyTable и запись в AuditTable?
4) Если, например, нет возможности записать в AuditTable, скажем деление на ноль в вычислении, то произойдет и откат MyTable и AuditTable?

Спасибо!
30 дек 13, 11:34    [15363925]     Ответить | Цитировать Сообщить модератору
 Re: Помогите разобраться с триггерами плз.  [new]
Glory
Member

Откуда:
Сообщений: 104760
1. триггер срабатывает на команду, а не строки
2. триггер выполняется в транзакции, которую начала его команда
3. да
4. да
30 дек 13, 11:37    [15363945]     Ответить | Цитировать Сообщить модератору
 Re: Помогите разобраться с триггерами плз.  [new]
abrashka
Member

Откуда:
Сообщений: 517
Glory,
Спасибо огромное!

Вот еще один вопрос в догонку к предидущему примеру, если выполняется такая транзакция:
begin transaction MyTran

update t1...

update table MyTable
set Name='abc'
where ID>1000 and ID<2000

update t2...

commit transaction MyTran

и падает update t2, то откатываются изменения в MyTable и в AuditTable тоже?
30 дек 13, 12:02    [15364070]     Ответить | Цитировать Сообщить модератору
 Re: Помогите разобраться с триггерами плз.  [new]
sphinx_mv
Member [заблокирован]

Откуда:
Сообщений: 1672
abrashka
Вот еще один вопрос в догонку к предидущему примеру, если выполняется такая транзакция:
begin transaction MyTran

update t1...

update table MyTable
set Name='abc'
where ID>1000 and ID<2000

update t2...

commit transaction MyTran

и падает update t2, то откатываются изменения в MyTable и в AuditTable тоже?
Читать про SET XACT_ABORT
30 дек 13, 13:06    [15364534]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить