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

Откуда:
Сообщений: 2
Помогите пожалуйста с блокироваками. В этой теме новичок.

Есть две таблицы, A и B
Делается SELECT .. FROM A INNER JOIN B ON A.ID = B.ID_inA WHERE B.Param1 = 1 AND B.Param2 = 2

Все это делается внутри транзакции. Нужно, чтобы данный SELECT блокировал на чтение строки из соответсвующих таблиц.


Сейчас использую: SELECT .. FROM A WITH (XLOCK, ROWLOCK) INNER JOIN B WITH (XLOCK, ROWLOCK) ON A.ID = B.ID_inA WHERE B.Param1 = 1 AND B.Param2 = 2

Как мне проверить, что данный запрос блокирует именно строки, а не всю таблицу?
13 сен 09, 15:22    [7652525]     Ответить | Цитировать Сообщить модератору
 Re: Xlock Rowlock  [new]
iljy
Member

Откуда:
Сообщений: 8711
celestix,

sp_lock
13 сен 09, 15:25    [7652528]     Ответить | Цитировать Сообщить модератору
 Re: Xlock Rowlock  [new]
celestix
Member

Откуда:
Сообщений: 2
Вопрос в том, что я запускаю все эти команды из .net приложения и не знаком с чистым синтаксисом sql для провередения транзакций. Просто я руками прописываю хинты в запросах
Поэтому прошу просто сказать на глаз, правильно ли составлен запрос.
Спасибо.
13 сен 09, 15:43    [7652542]     Ответить | Цитировать Сообщить модератору
 Re: Xlock Rowlock  [new]
iljy
Member

Откуда:
Сообщений: 8711
celestix,

на глаз это сказать невозможно в принципе, поскольку например существует такая вещь, как эскалация блокировок, и вообще, решать задачи "на глаз" - это к экстрасенсам. Запустите SQL Server Management Studio (или Enterprais Maneger, смотря по версии) - и изучайте поведение запроса предметно.
13 сен 09, 16:00    [7652547]     Ответить | Цитировать Сообщить модератору
 Re: Xlock Rowlock  [new]
Crimean
Member

Откуда:
Сообщений: 13148
> Нужно, чтобы данный SELECT блокировал на чтение

XLOCK

> строки из соответсвующих таблиц

месье гуру архитектуры сервера?
если нет, то пусть сервер сам решает

> Вопрос в том, что я запускаю все эти команды из .net приложения

если транзакция тянется на несколько батчей - соболезную. если нет - покатит

> Как мне проверить, что данный запрос блокирует именно строки, а не всю таблицу?

оставьте это дело серверу а лучше посмотрите в сторону оптимистичных блокировок
14 сен 09, 10:28    [7653831]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить