Доступ к остальным записям, кроме записей в транзакции SQL Server - PullRequest
0 голосов
/ 05 июля 2018

Я пытаюсь выполнить задачу в SQL Server. Я делюсь примером проблемы, так как не могу поделиться полным описанием задачи.

Проблема: у нас есть таблица с именем Person:

Person_Id   Person_Name   Person_Age
---------   -----------   ----------
        1           AAA           25
        2           BBB           25
        3           CCC           25
        4           DDD           25

Из этой таблицы я хочу использовать Person_Id = 4, который будет храниться внутри TRANSACTION.

Person_Id   Person_Name   Person_Age
---------   -----------   ----------
        4           DDD           25

При выполнении вышеуказанной транзакции пользователь хочет получить доступ (INSERT, UPDATE, DELETE) ко всем другим записям (кроме Person_Id = 4), которые находятся в таблице, как показано ниже:

Person_Id   Person_Name   Person_Age
---------   -----------   ----------
        1           AAA           25
        2           BBB           25
        3           CCC           25

Что я пробовал:

Я пытался с NOLOCK, ROWLOCK, но не смог этого добиться. Пожалуйста, помогите мне достичь этого сценария. Я также попробовал эту ссылку . По этой ссылке, используя

SET TRANSACTION ISOLATION LEVEL SERIALIZABLE;

запрос SELECT извлекает неизмененные данные. Например, если я пытаюсь UPDATE записать в TRANSACTION, и запись была обновлена, но TRANSACTION занят выполнением других операторов.

Person_Id   Person_Name   Person_Age
---------   -----------   ----------
        4           DDD           25

Теперь, когда другие соединения пытаются SELECT записей в таблице, будут возвращены все другие записи вместе с записью: Person_Id = 4 (со старым значением).

SERIALIZABLE Определяет следующее:

Заявления не могут прочитать данные, которые были изменены, но еще не совершенные другими транзакциями.

Исходя из вышесказанного, когда я использую SERIALIZABLE изоляцию, он по-прежнему возвращает более старую запись Person_Id = 4. Это я не хочу в этом случае.

Я хочу получить все остальные записи, кроме записей в TRANSACTION.

Другими словами, если запись (и) заблокирована в TRANSACTION, то эта запись (записи) не должна появляться ни в каком другом SELECT STATEMENT EXECUTION с другими соединениями.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...