Эта проблема касается одновременных высокоскоростных вставок. Должен признаться, это очень интересно в моих глазах.Как принудительно запускать триггер вставки после его вставки, прежде чем какая-либо другая вставка будет выполнена?
Я использую SQL Server 2008 R2, выполняющий вставки T-SQL и после запуска триггера.
Я хотел бы убедиться, что никакая команда не будет выполнена между вставкой и ее после триггера вставки.
Использование уровней изоляции вызывает взаимоблокировки или просто НЕ решить проблему.
Процедура Я использую ответ/решение от Фила SQL Server dependent Identity - is there such a thing?
Проблема заключается в том:
иногда вставки получить между предыдущей вставкой и его после того, как триггер вставки, в результате чего этот результат :
RoomID ItemID ItemDescription ID
------ ------ --------------- --
7 1 Door 1
7 2 Window (West) 2
7 3 Window (North) 3
8 1 Door 4
8 2 Table #1 5
8 3 Table #2 6
7 4 Table #1 7
8 4 Chair #1 8
7 6 Table #2 9
7 5 Table #3 10
8 5 Chair #2 11
См. ID # 9 и № 10. Идентификаторы Thair Item переключаются. ItemID должен был быть 5 и 6 соответственно, а не 6 и 5, но 10-я вставка, вероятно, произошла до того, как триггер после 9-го завершения завершил выполнение.
Эта проблема возникает менее 0,5% вставок: 2 переключателя с 4 записями для 1000 вставок или менее. Да, иногда нет появления переключателей.
Повышение уровня изоляции на один шаг не помогает и даже время от времени приводит к увеличению количества ключей/переключателей зависимых ключей. Повышение двух уровней изоляции вызвало блокировку.
Снижение уровня изоляции уменьшает количество переключателей, но они все еще созданы.
Запущенный уровень изоляции перед каждой вставкой и возврат к уровню изоляции по умолчанию в конце триггера вызывает взаимоблокировки (в моих экспериментах все вставки не фиксировались!).
Кто-нибудь видит выход?
Как заставить вставку и ее триггер после вставки выполнить вместе, запрещая другие вставки в одну и ту же таблицу между ними?
Непонятно мне, что ItemID есть или делает. Можете ли вы использовать вычисляемый столбец, чтобы найти его вместо триггера 'after'? –
Кроме того, в SQL 2012 вы можете использовать последовательность. –
Можете ли вы показать нам ... '1 таблицу перед вставками. '2' вставки thmeselves, и их порядок. '3' код в триггере. – MatBailie