Гость
Map
Форумы / SQL [закрыт для гостей] / Топик ПапыхДжунства / 6 сообщений из 6, страница 1 из 1
26.10.2022, 08:11
    #196262
Doublekey
Участник
[скрыт]
[заблокирован]
Поместить в игнор-лист Сообщения автора в теме
Топик ПапыхДжунства
Джунская задача на Оракле решается вообще без каких либо нюансов на MSSQL подозреваю они есть
Глобально это задача о пессимистической или оптимистической блокировке.

Есть список договоров. типа таблица.
мы открываем один договор в форме на редактирование. и не хотим чтобы в этом время его кто то еще редактировал.
поэтому берем ставим блокировку ну там транзакцию открыли.
И вроде типа все хорошо. Но нюанс
Скуль сервер запретит и чтение этой строки в других транзакциях

Что можно сделать можно сделать nolock , можно readpast
Но второй исключит строку из выборки. а первый прочитает незафикисированные данные. то есть не те которые были ДО блокировки а те которые вот прям ща.

Как с этим чуть чуть побороться ;-) - собрать апдейт или инсерт на клиентской части полностью. потом действуем и сразу же закрываем транзакцию.
тогда эти миллисекунды расхождения данных при селект нолоке не будут критичны.

а тот самый селект нолок будет показывать те данные которые были до блокировки (потому что мы тупо их не меняем)

в эту же тему второй вопрос
скажем кто то адын открыл договор на редактирование. каким образом запретить сделать это второму?
в оракле есть фор апдейт но вэйт а что есть в мсскуле

не галочку же ставить ?

Кстати а вот совсем Папых вопрос. По какой системной таблице или как вообще в MSSQL узнать заблокирована запись или нет ДО ТОГО как мы подвиснем на блокировке? ТОгда по идее это нормальный флаг что договор редактируется идите отсюда
...
Рейтинг: 0 / 0
26.10.2022, 08:29
    #196269
Умник^практик
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Топик ПапыхДжунства
if exists(select 0 from table (nolock) where id_str = @id_str) ...
...
Изменено: 26.10.2022, 08:31 - Умник^практик
Рейтинг: 0 / 0
26.10.2022, 08:36
    #196274
Doublekey
Участник
[скрыт]
[заблокирован]
Поместить в игнор-лист Сообщения автора в теме
Топик ПапыхДжунства
Умник^практик  26.10.2022, 08:29
[игнорируется]
if exists(select 0 from table (nolock) where id_str = @id_str) ...
И чего? Хочешь сказать что с нолоком при блокировке будет пустая выборка? может ReadPast?
...
Изменено: 26.10.2022, 08:37 - Doublekey
Рейтинг: 0 / 0
26.10.2022, 08:42
    #196279
Doublekey
Участник
[скрыт]
[заблокирован]
Поместить в игнор-лист Сообщения автора в теме
Топик ПапыхДжунства
Код: SQL
1.
2.
begin tran
update mytable set mycolumn = 5 where testcol =1
readpast.jpg
ридпаст работает да. блокированная строка отсутствует в наборе. нолок показывает все в режиме грязного чтения.

В принципе канэшно можно вопрос считать решенным но все равно варианты интересны
...
Изменено: 26.10.2022, 08:45 - Doublekey
Рейтинг: 0 / 0
26.10.2022, 09:30
    #196303
Просто Трёп
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Топик ПапыхДжунства
Doublekey  26.10.2022, 08:11
[игнорируется]
собрать апдейт или инсерт на клиентской части полностью. потом действуем и сразу же закрываем транзакцию.
тогда эти миллисекунды расхождения данных при селект нолоке не будут критичны.
Я когда задумался над этим первый раз, решил только так и делать. И вообще отказался от уродских визуальных database-компонент, которые на тот момент были в Дельфи. Сперва выбираем все, что надо, располагаем на удобненьком юзерфрендли интерфейсике, после внесения изменений юзверь жмет "записать" или "Ок".

Кстати, до сих пор не могу привыкнуть к окнам настроек, в которых нет ok и cancel. Пиздец как бесит. Лишает возможности откатиться на шаг назад в случае ошибки.
...
Рейтинг: 0 / 0
17.01.2023, 13:44
    #274699
Администратор
Администратор
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Топик ПапыхДжунства
Тема была перенесена из форума 'Просто Трёп'.
...
Администратор:
Тема была перенесена из форума 'Просто Трёп'.
Рейтинг: 0 / 0
Форумы / SQL [закрыт для гостей] / Топик ПапыхДжунства / 6 сообщений из 6, страница 1 из 1
Целевая тема:
Создать новую тему:
Автор:
Найденые пользователи ...
Разблокировать пользователей ...
Читали тему (1): Анонимы (1)
Читали форум (4): Анонимы (3), Yandex Bot 9 мин.
Пользователи онлайн (158): Анонимы (147), zzdima, Сталкер, жЫвоглот, Yandex Bot, Брюквенные годы, Biene Maja 3 мин., erbol 5 мин., S Baltiki 6 мин., anonymous 7 мин., Гарыныч 8 мин., Кусь 9 мин.
x
x
Закрыть


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