0

Следующая ссылка описывает сериализуемый уровень изоляции транзакций.Сфера применения замков при использовании СРАВНИТЕЛЬНОГО УРОВНЯ ИЗОЛЯЦИИ SERIALIZABLE

http://blogs.msdn.com/b/sqlcat/archive/2011/02/20/concurrency-series-basics-of-transaction-isolation-levels.aspx

Предположим, что у меня есть один пользовательский таблицу [dbo].[Table_A] обновления. А другой пользователь обновляет таблицу [dbo].[Table_B]. И я хочу сериализовать эти два оператора обновления (это означает, что нужно дождаться, когда первый будет завершен до начала второго), несмотря на то, что мы касаемся разных таблиц. Я предполагаю, что не могу использовать блокировку таблицы, но, возможно, блокировка диапазона выполнит это. Может ли кто-нибудь помочь мне понять, как выглядит код? Или это не будет работать с функциональностью уровня изоляции транзакций в SQL Server 2008?

+1

Зачем вам сериализовать обновления для разных таблиц? Какую проблему вы пытаетесь решить с этим? – Quassnoi

+0

Я имею дело с моделью ациклического графа (полииерархии). Одна таблица соединена с другой и обеспечивает наследование. – MacGyver

+0

Итак, вы обновляете 'table_b', используя данные из' table_a'? Не могли бы вы опубликовать свои заявления об обновлениях? – Quassnoi

ответ

1

Вы можете разместить замки приложения:

EXEC sp_getapplock @resource = 'my_resource_token', @lockMode = 'Exclusive' 

UPDATE ... 

EXEC sp_releaseapplock @resource = 'my_resource_token' 

Это заблокирует, если другой сеанс Изучается my_resource_token.

+0

Я буду размещать детали позже, чтобы приложение работало лучше. Прямо сейчас, это прекрасно. Благодаря! Так что я просто понимаю, любая команда, запущенная в базе данных, сериализована? – MacGyver

+1

@MacGyver: да, все между 'getapplock' и' releaseapplock' может выполняться только по одной транзакции за раз. – Quassnoi

+0

Каков наилучший способ найти блокировки с использованием этой методологии? Использование 'sp_lock'? – MacGyver