У меня есть таблица с кластеризованным индексом первичного ключа в столбце uniqueidentifier. У меня есть процедура, которая запускает следующие псевдо-функции:
begin transaction
read from table 1
insert into table 2
update table 1 with pointer to table 2 record
commit transaction
Все это работает нормально, пока одна и та же процедура не будет выполняться одновременно из другого места. Как только это происходит, одно из выполнений блокируется и завершается каждый раз на первичном ключе.
Есть идеи, что я могу сделать, чтобы предотвратить это, если не сказать просто «не запускайте его одновременно»? Транзакции в настоящее время выполняются на уровне изоляции READ COMMITTED.


увеличьте уровень изоляции транзакции, как намекает eulerfx.myopenid.com.
используйте sql «мьютексы», чтобы просто дождаться завершения процедуры, прежде чем разрешить выполнение другой. http://weblogs.sqlteam.com/mladenp/archive/2008/01/08/Application-Locks-or-Mutexes-in-SQL-Server-2005.aspx
использовать уровень изоляции моментального снимка. в зависимости от того, что делает ваше приложение, это может сработать. однако это приводит к другим проблемам. http://msdn.microsoft.com/en-us/library/ms189050.aspx
номер 2 требует большего количества изменений кода, чем 1. но иногда нельзя просто повысить уровень изоляции.