2015-04-09 2 views
0

Я хочу сделать механизм блокировки таким образом, но я не уверен, что это возможно или нет. Сначала заблокируйте строку во временной таблице (с оператором select и выходными данными в приложение) Далее я делаю некоторые другие транзакции (Insert, Update to another table) И затем отпустите заблокированную строку.Строки блокировки - вручную (разные транзакции)

В то время, любой оператор выбора, который хочет получить данные из заблокированных строк должны ждать

+1

Вы проверили sp_getapplock? Похоже, вы пытаетесь реализовать что-то подобное. –

+0

@JamesZ: Спасибо. Я проверю! – pcuong

ответ

0

Все, что вам нужно, это строжайший уровень изоляции транзакций, это позволит другим пользователям доступа строки, даже если вы только чтению ряд.

SET TRANSACTION ISOLATION LEVEL SERIALIZABLE; 

BEGIN TRANSACTION; 

    SELECT * FROM TableName WHERE <some row> 

    UPDATE <Statement> 

COMMIT TRANSACTION; 
+0

Serializable не гарантирует блокировки строк. Он гарантирует как последовательное выполнение. Две транзакции могут одновременно считывать одно и то же значение при сериализации, поскольку конфликт сериализации отсутствует. – usr

0

Смотрите эту статью KB324417 и попробовать это:

SET TRANSACTION ISOLATION LEVEL SERIALIZABLE; 

BEGIN TRANSACTION; 

    SELECT * FROM TableName (XLOCK, PAGLOCK) WHERE <some row> 

    UPDATE <Statement> 

COMMIT TRANSACTION; 
Смежные вопросы