powered by simpleCommunicator - 2.0.60     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Как правильно сделать транзакцию и блокировку записи?
20 сообщений из 20, страница 1 из 1
Как правильно сделать транзакцию и блокировку записи?
    #39812887
Фотография sc2r2bey
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Впервые столкнулся с подобной задачей.
Нужно выбрать запись из таблицы(SELECT TOP 1), если она есть, то заблокировать и сделать ее обновление, в случае успеха вернуть значение одного поля, в тоже время, если кто-то будет делать выборку из той же таблицы не смог ее выбрать(запись, только другие, соотетствующие этому условию)
...
Рейтинг: 0 / 0
Как правильно сделать транзакцию и блокировку записи?
    #39812888
TaPaK
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
sc2r2bey,
updlock, readpast
...
Рейтинг: 0 / 0
Как правильно сделать транзакцию и блокировку записи?
    #39812901
Фотография sc2r2bey
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
вы имеете ввиду, что нужно так сделать?
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
BEGIN TRAN

  select top 1 COMMAND
  from EXAMPLE_TABLE
  with (UPDLOCK, ROWLOCK)
  where PROCESSED=false;

ROLLBACK
BEGIN TRANSACTION

      UPDATE TOP(1) EXAMPLE_TABLE
      SET colum1 = colum1 + 1
...
Рейтинг: 0 / 0
Как правильно сделать транзакцию и блокировку записи?
    #39812903
Фотография sc2r2bey
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ошибочка, тупо из примера взял

with (UPDLOCK, READPAST)
...
Рейтинг: 0 / 0
Как правильно сделать транзакцию и блокировку записи?
    #39812906
TaPaK
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
...
Рейтинг: 0 / 0
Как правильно сделать транзакцию и блокировку записи?
    #39812910
Фотография alexeyvg
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
sc2r2beyВпервые столкнулся с подобной задачей.
Нужно выбрать запись из таблицы(SELECT TOP 1), если она есть, то заблокировать и сделать ее обновление, в случае успеха вернуть значение одного поля, в тоже время, если кто-то будет делать выборку из той же таблицы не смог ее выбрать(запись, только другие, соотетствующие этому условию)Ээээ, а почему нельзя просто сделать один UPDATE с такой функциональностью?
...
Рейтинг: 0 / 0
Как правильно сделать транзакцию и блокировку записи?
    #39812913
Фотография sc2r2bey
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Например?
...
Рейтинг: 0 / 0
Как правильно сделать транзакцию и блокировку записи?
    #39812930
Фотография alexeyvg
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
sc2r2beyНапример?Например, так:
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
use tempdb
go
create table test(id int identity, a int, b int, condition bit)
go
insert test(a, b, condition) values (1,1,1), (2,2,0)

update test
set b=10
OUTPUT inserted.a
where condition = 1

go
drop table test

Или можно положить OUTPUT в таблицу-переменную, это уже зависит от того, что вы подразумеваете под "вернуть значение одного поля" - нужно, что бы при неуспехе вообще не было выводимого рекордсета, или нужно, что бы он был пустой?
...
Рейтинг: 0 / 0
Как правильно сделать транзакцию и блокировку записи?
    #39812931
Фотография alexeyvg
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
alexeyvg
Код: sql
1.
where condition = 1

Тут, конечно, нужно написать правильное условие, соответствующее вашему "Нужно выбрать запись из таблицы(SELECT TOP 1)"; т.к. я его не знаю, то не стал развивать.
...
Рейтинг: 0 / 0
Как правильно сделать транзакцию и блокировку записи?
    #39812958
Фотография sc2r2bey
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
спасибо, в принципе более простое решение, мне нужно вернуть значение поля, оно не меняется в процессе запроса
в тразакцию не надо оборачивать, если два таким запроса прилетят одновременно?
...
Рейтинг: 0 / 0
Как правильно сделать транзакцию и блокировку записи?
    #39812959
Фотография sc2r2bey
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
TaPaK,
спасибо, хороший материал, а как вернуть мне значение поля выбранной строки?
...
Рейтинг: 0 / 0
Как правильно сделать транзакцию и блокировку записи?
    #39812960
TaPaK
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
sc2r2beyTaPaK,
спасибо, хороший материал, а как вернуть мне значение поля выбранной строки?
https://docs.microsoft.com/en-us/sql/t-sql/queries/output-clause-transact-sql?view=sql-server-2017
...
Рейтинг: 0 / 0
Как правильно сделать транзакцию и блокировку записи?
    #39812963
Фотография sc2r2bey
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
alexeyvg, и еще момент, если условию будут соответствовать более одной записи?
...
Рейтинг: 0 / 0
Как правильно сделать транзакцию и блокировку записи?
    #39812965
msLex
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
sc2r2beyalexeyvg, и еще момент, если условию будут соответствовать более одной записи?

update t
...
from (
select top 1 ...
from ...
) t
...
Рейтинг: 0 / 0
Как правильно сделать транзакцию и блокировку записи?
    #39812967
Фотография sc2r2bey
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
msLex, разве update top 1 нельзя использовать?
...
Рейтинг: 0 / 0
Как правильно сделать транзакцию и блокировку записи?
    #39812974
TaPaK
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
sc2r2beymsLex, разве update top 1 нельзя использовать?
можно
...
Рейтинг: 0 / 0
Как правильно сделать транзакцию и блокировку записи?
    #39812975
msLex
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
sc2r2beymsLex, разве update top 1 нельзя использовать?

можно, если не нужен order by (приоритет обработки записей)
...
Рейтинг: 0 / 0
Как правильно сделать транзакцию и блокировку записи?
    #39812984
Фотография sc2r2bey
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
спасибо всем, все оказалось не так сложно, как я боялся )
только какой вариант выбрать? )))
...
Рейтинг: 0 / 0
Как правильно сделать транзакцию и блокировку записи?
    #39812990
Фотография alexeyvg
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
sc2r2beyalexeyvg, и еще момент, если условию будут соответствовать более одной записи?Я писал, что условие нужно написать такое, что бы соответствовало вашим требованиям. Как тут уже ответили, можно с with, можно с update top 1, можно с подзапросом и джойном, и т.д.
Это всё зависит от ваших требований и модели данных, про которые мы ничего не знаем.
...
Рейтинг: 0 / 0
Как правильно сделать транзакцию и блокировку записи?
    #39812991
Фотография alexeyvg
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
sc2r2beyтолько какой вариант выбрать? )))Самый простой и понятный для чтения.
...
Рейтинг: 0 / 0
20 сообщений из 20, страница 1 из 1
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Как правильно сделать транзакцию и блокировку записи?
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]