|
![]() |
#1 |
Участник
|
Цитата:
Сообщение от Omeo
![]() можно в БД добавить Linked Server на внешний MSSQL Server и бд, из текущей транзакции выполнить запрос вида SELECT * FROM [ExternalMSSQLServer].[ExternalDB].[Table] WITH (updlock)
MSDTC (он же https://en.wikipedia.org/wiki/Micros...on_Coordinator) сделает распределенную транзакцию |
|
![]() |
#2 |
Участник
|
Блокировать на чтение получится только если открыть транзакцию + сделать update записи и подождать, а потом сделать commit или abort. Но и тут никто не может запретить грязное чтение. IMHO лучше сделать дополнительное поле Blocked и работать с ним (если это возможно).
|
|
![]() |
#3 |
Участник
|
От грязного чтения защищать не надо, пусть кто хочет, тот читает, а кто не хочет - это наш случай. И в транзакции только INSERTы, нужно чтобы они полностью закончились до того, как будут прочитаны. .
Последний раз редактировалось valmictar; 29.11.2019 в 17:54. |
|
![]() |
#4 |
Участник
|
А как Вы эти самые insert-ы делаете? Разве их нельзя окружить явными командами начала и окончания транзакции? Можете привести здесь код вставки? Не обязательно детально, просто общую идею организации работы показать
__________________
- Может, я как-то неправильно живу?! - Отчего же? Правильно. Только зря... |
|
![]() |
#5 |
Участник
|
Просто транзакции не хватает.
Решили использованием TABLOCKX Указывает, что к таблице применяется монопольная блокировка. XLOCK Указывает, что монопольные блокировки применяются и удерживаются до завершения транзакции. Если при этом указан аргумент ROWLOCK, PAGLOCK или TABLOCK, монопольная блокировка применяется к соответствующему уровню гранулярности. |
|