29.11.2019, 12:30 | #1 |
Участник
|
Как из DAX запустить транзакцию, чтобы она блокировала таблицу во внешней MS SQL базе
DAX 2019
Собственно всё в заголовке |
|
29.11.2019, 13:48 | #2 |
Участник
|
Я бы посмотрел в сторону Connection ttsbegin\ttscommit
|
|
29.11.2019, 13:58 | #3 |
Участник
|
а это что за зверь?
вообще в DAX можно выполнить произвольный запрос SQL к базе DAX так что выполнить какой-нибудь запрос вроде (код предоставляется as is - что сразу нагуглилось) Код: BEGIN TRAN SELECT 1 FROM TABLE WITH (TABLOCKX) WAITFOR DELAY '00:02:00' ROLLBACK TRAN GO |
|
|
За это сообщение автора поблагодарили: valmictar (1). |
29.11.2019, 14:02 | #4 |
Участник
|
можно в БД добавить Linked Server на внешний MSSQL Server и бд, из текущей транзакции выполнить запрос вида SELECT * FROM [ExternalMSSQLServer].[ExternalDB].[Table] WITH (updlock)
MSDTC (он же https://en.wikipedia.org/wiki/Micros...on_Coordinator) сделает распределенную транзакцию Последний раз редактировалось Omeo; 29.11.2019 в 14:04. |
|
29.11.2019, 14:26 | #5 |
Участник
|
|
|
29.11.2019, 14:29 | #6 |
Участник
|
Цитата:
Сообщение от Omeo
можно в БД добавить Linked Server на внешний MSSQL Server и бд, из текущей транзакции выполнить запрос вида SELECT * FROM [ExternalMSSQLServer].[ExternalDB].[Table] WITH (updlock)
MSDTC (он же https://en.wikipedia.org/wiki/Micros...on_Coordinator) сделает распределенную транзакцию |
|
29.11.2019, 16:56 | #7 |
Участник
|
Блокировать на чтение получится только если открыть транзакцию + сделать update записи и подождать, а потом сделать commit или abort. Но и тут никто не может запретить грязное чтение. IMHO лучше сделать дополнительное поле Blocked и работать с ним (если это возможно).
|
|
29.11.2019, 17:51 | #8 |
Участник
|
От грязного чтения защищать не надо, пусть кто хочет, тот читает, а кто не хочет - это наш случай. И в транзакции только INSERTы, нужно чтобы они полностью закончились до того, как будут прочитаны. .
Последний раз редактировалось valmictar; 29.11.2019 в 17:54. |
|
29.11.2019, 18:48 | #9 |
Участник
|
А как Вы эти самые insert-ы делаете? Разве их нельзя окружить явными командами начала и окончания транзакции? Можете привести здесь код вставки? Не обязательно детально, просто общую идею организации работы показать
__________________
- Может, я как-то неправильно живу?! - Отчего же? Правильно. Только зря... |
|
27.12.2019, 10:34 | #10 |
Участник
|
Просто транзакции не хватает.
Решили использованием TABLOCKX Указывает, что к таблице применяется монопольная блокировка. XLOCK Указывает, что монопольные блокировки применяются и удерживаются до завершения транзакции. Если при этом указан аргумент ROWLOCK, PAGLOCK или TABLOCK, монопольная блокировка применяется к соответствующему уровню гранулярности. |
|