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

Откуда:
Сообщений: 20
Как заблокировать запись да так, чтоб сервер не в нычку молчал а выдавал сообщенеие типа "запсь заблокирована другим пользователем",
например в Oracle это делается так: select * from table for update nowait
4 ноя 03, 18:55    [406278]     Ответить | Цитировать Сообщить модератору
 Re: Блокировка записи на сервере с возвратом кода  [new]
Glory
Member

Откуда:
Сообщений: 104760
SET LOCK_TIMEOUT - Specifies the number of milliseconds a statement waits for a lock to be released.
4 ноя 03, 19:16    [406305]     Ответить | Цитировать Сообщить модератору
 Re: Блокировка записи на сервере с возвратом кода  [new]
Crimean
Member

Откуда:
Сообщений: 13148
select * from mytable (READPAST) where

только быть готовым, что ничего не вычитается.
мне этот вариант нравится больше, чем манипуляции с тайм-аутом.
4 ноя 03, 19:26    [406325]     Ответить | Цитировать Сообщить модератору
 Re: Блокировка записи на сервере с возвратом кода  [new]
Glory
Member

Откуда:
Сообщений: 104760
2Crimean
Но при этом сервер не сообщит, что запись(и) заблокированы другим пользователем.
4 ноя 03, 19:30    [406333]     Ответить | Цитировать Сообщить модератору
 Re: Блокировка записи на сервере с возвратом кода  [new]
_Yan
Member

Откуда:
Сообщений: 20
2Crimean

При применении параметра READPAST пропускаются строки, заблокированные другими транзакциями. Если ты хочешь эту запись обновить, тогда придется постоянно выкачивать с сервера весь набор данных, пока блокировка не будет снята. Кроме того пользователь, который просматривается таблицу не увидит эту запись даже если он внес ее пару минут назад и закомитил
4 ноя 03, 19:50    [406354]     Ответить | Цитировать Сообщить модератору
 Re: Блокировка записи на сервере с возвратом кода  [new]
_Yan
Member

Откуда:
Сообщений: 20
2Glory Пасиба. Именно то, что я хотел. Т.е. по умолчанию SQL Server отмалчивается о локах, что по-моему не сильно разумно придумано
4 ноя 03, 20:04    [406364]     Ответить | Цитировать Сообщить модератору
 Re: Блокировка записи на сервере с возвратом кода  [new]
Glory
Member

Откуда:
Сообщений: 104760
Не, по умолчанию он будет ждать "вечно", если только это не deadlock
4 ноя 03, 20:09    [406369]     Ответить | Цитировать Сообщить модератору
 Re: Блокировка записи на сервере с возвратом кода  [new]
Crimean
Member

Откуда:
Сообщений: 13148
Я люблю поступать примерно так

if exists(select 1 from mytable (nolock) where id = @id)

and exists(select 1 from mytable (readpast) where id = @id) ...


и все проблемы :)
просто иногда софта (планировщик, некоторые клиентские либы и т.д.) очень нехорошо относятся к любым сообщениям от сервера.
5 ноя 03, 12:01    [407087]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить