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

Откуда: Россия, Ростовская область, г. Таганрог
Сообщений: 1295
Не могу разобратся и найти информацию.

Предположим, мы выполняем DML операцию (пусть update). У нас есть триггер на таблице (предположим after update). Lолгий, но более не изменяющий эту таблицу (пусть там вообще стоит waitfor delay несколько секунд).

Когда заканчивается транзакция? после того как выполнился непосредственно update и другой update может редактировать эту строку если триггер всё ещё висит? Или транзация целостная update+триггер?

Проблема изначально у меня такая, что досталась "та ещё база", часть запросов Link2SQL, но есть ещё и триггеры

При выполнении некоторых условий (update для некоторых колонок) запускаются дополнительные операторы,
которые заканчиваются

UPDATE ACTION SET EDITNUMBER=@EN WHERE ACTION.ID IN (SELECT DISTINCT ID FROM INSERTED )

(лучше бы inner join написали)
В этой же таблице (до этого тоже апдейты, в таблице аналогичной "секвенции" с хранением последного значение EDITNUMBER)

Так вот мне интересно,
будет ли заблокированна СТРОКА во ВРЕМЯ выполнения триггера, особенно если другой запрос "хочет апдейта".
В целом может ли блокироваться от этого таблица, а не конкретная запись?

Я просто выловил блокировку между триггером и update этой таблицы ".... where pk = @pk" причём по pk если первичный ключ с кластерным индексом.
16 сен 11, 18:04    [11290258]     Ответить | Цитировать Сообщить модератору
 Re: Триггер, Блокировка  [new]
NIIIK
Member

Откуда: Россия, Ростовская область, г. Таганрог
Сообщений: 1295
А... ещё эти индусы додумались запихкать uniqueidnetifier в varchar(100), но констрейнт есть.
16 сен 11, 18:05    [11290268]     Ответить | Цитировать Сообщить модератору
 Re: Триггер, Блокировка  [new]
Glory
Member

Откуда:
Сообщений: 104751
NIIIK
Когда заканчивается транзакция? после того как выполнился непосредственно update и другой update может редактировать эту строку если триггер всё ещё висит? Или транзация целостная update+триггер?

А как же "выполнится непосредственно update", если сработавший для него триггер не закончил работу ?
16 сен 11, 18:13    [11290310]     Ответить | Цитировать Сообщить модератору
 Re: Триггер, Блокировка  [new]
BVB_berserk
Member

Откуда:
Сообщений: 35
Триггер выполняется в той же транзакции. Именно это дает возможность в триггере откатить транзакцию, в ходе которой выполнялся Update (в данном случае).
19 сен 11, 13:20    [11297850]     Ответить | Цитировать Сообщить модератору
 Re: Триггер, Блокировка  [new]
хелоу тгн
Guest
NIIIK
В целом может ли блокироваться от этого таблица, а не конкретная запись?

запросто, если есть от чего эскалировать.
NIIIK
Я просто выловил блокировку между триггером и update этой таблицы ".... where pk = @pk"

...что бы это значило?
19 сен 11, 13:31    [11298000]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить