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

Откуда:
Сообщений: 201
Добрый день! Нужны советы в решении такой задачи: надо реализовать блокировку записи (строки) в БД, когда пользователь нажимает на CheckBox в приложении, т.е. нажал и запись заблокировалась, и только чтобы этот же пользователь мог отжать CheckBox и запись обратно становилась доступной!
Пробовал вот таким запросом заблочить
SELECT * FROM Nastroyka WITH (ROWLOC) WHERE ID=1

Чет не проканало. Поделитесь советом! Спасибо заранее!
12 авг 13, 08:26    [14694696]     Ответить | Цитировать Сообщить модератору
 Re: Заблокировать запись  [new]
aleks2
Guest
Страдалец, тибе сначала надо вкурить разницу между
1. бизнес-блокировкой
2. транзакционной блокировкой.

1-я накладывается ПРИЛОЖЕНИЕМ для оповещения прочих типо: "я плющу эту запись - не мешать".
2-я накладывается СЕРВЕРОМ для обеспечения транзакционной целостности.

Использовать вторую в качестве первой - это плохая идея.

Поправить твой опус лехко
begin transaction
SELECT * FROM Nastroyka WITH (ROWLOC) WHERE ID=1

тока это не понравится людям.

Надо как-то так
update N set Locked = <ну, тут есть свои сложности... с разблокировкой>
FROM Nastroyka N WHERE ID=1;
if @@trancount > 0 commit;
12 авг 13, 08:36    [14694724]     Ответить | Цитировать Сообщить модератору
 Re: Заблокировать запись  [new]
fthjj
Guest
FOGOT-BAstA,

select id, c1,...
from
(
update t1
output id, c1, c2, c3, ...
set locked = 1
where id = @id
) d
12 авг 13, 08:41    [14694744]     Ответить | Цитировать Сообщить модератору
 Re: Заблокировать запись  [new]
aleks2
Guest
fthjj
FOGOT-BAstA,

select id, c1,...
from
(
update t1
output id, c1, c2, c3, ...
set locked = 1
where id = @id
) d


Msg 10729, Level 15, State 1, Line 6
A nested INSERT, UPDATE, DELETE, or MERGE statement is not allowed in a SELECT statement that is not the immediate source of rows for an INSERT statement.
12 авг 13, 08:44    [14694756]     Ответить | Цитировать Сообщить модератору
 Re: Заблокировать запись  [new]
StarikNavy
Member

Откуда: Москва
Сообщений: 2428
FOGOT-BAstA
Чет не проканало. Поделитесь советом! Спасибо заранее!


как уже подсказали, лучше всего ставить флажок "не трогать" (через update), и соответственно в других местах проверять его
12 авг 13, 09:50    [14694953]     Ответить | Цитировать Сообщить модератору
 Re: Заблокировать запись  [new]
Ken@t
Member

Откуда: 大地
Сообщений: 3265
StarikNavy
FOGOT-BAstA
Чет не проканало. Поделитесь советом! Спасибо заранее!


как уже подсказали, лучше всего ставить флажок "не трогать" (через update), и соответственно в других местах проверять его


для этого прмдумали sp_getapplock, sp_releaseapplock , APPLOCK_MODE, APPLOCK_TEST
12 авг 13, 09:54    [14694972]     Ответить | Цитировать Сообщить модератору
 Re: Заблокировать запись  [new]
FOGOT-BAstA
Member

Откуда:
Сообщений: 201
В sp_getapplock что значат типы блокировок: Shared, Update, IntentShared, IntentExclusive или Exclusive??
APPLOCK_MODE я так понял на базу полностью распространяется?
14 авг 13, 12:14    [14706972]     Ответить | Цитировать Сообщить модератору
 Re: Заблокировать запись  [new]
Glory
Member

Откуда:
Сообщений: 104751
FOGOT-BAstA
В sp_getapplock что значат типы блокировок: Shared, Update, IntentShared, IntentExclusive или Exclusive??

Тип блокировки означает тип блокировки

FOGOT-BAstA
APPLOCK_MODE я так понял на базу полностью распространяется?

Какую еще базу ? Вы пытаетесь блокировать ресурс
14 авг 13, 12:20    [14707020]     Ответить | Цитировать Сообщить модератору
 Re: Заблокировать запись  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 32174
FOGOT-BAstA
В sp_getapplock что значат типы блокировок: Shared, Update, IntentShared, IntentExclusive или Exclusive??
Да, документация, к сожаланию, у микрософта стала хромать, в локальном BOL даже нету описания.

Но можно найти в английском MSDN
http://msdn.microsoft.com/en-us/library/ms175519(SQL.100).aspx
14 авг 13, 13:02    [14707369]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить