Прочитать как базовые, так и незафиксированные данные транзакции - PullRequest
1 голос
/ 18 января 2011

Используя SQL Server из .NET, возможно ли (с использованием одних и тех же или отдельных соединений) считывать как базовые данные, так и еще не принятые изменения из другого отдельного соединения?

Например:

У меня есть Connection1, который запускает транзакцию и вставляет запись с Id == 1 в таблицу, но не фиксирует ее

Из Connection2 я хотел бы прочитать таблицу без этой строки

Из Connection2 или Connection3 я хотел бы прочитать таблицу с существующей строкой.

Ответы [ 2 ]

0 голосов
/ 18 января 2011

Как вы знаете, вы можете просматривать непринятые данные в текущем сеансе следующим образом:

CREATE TABLE TestTable
(
    ID int not null
);

INSERT INTO TestTable(ID) values(1);
INSERT INTO TestTable(ID) values(2);
INSERT INTO TestTable(ID) values(3);

SELECT * FROM TestTable;

BEGIN TRANSACTION

    INSERT INTO TestTable(ID) values(4);
    INSERT INTO TestTable(ID) values(5);

    --Although the transaction has not commited you can still see the records inserted from within the current sessions scope.
    SELECT * FROM TestTable;


COMMIT TRANSACTION

DROP TABLE TestTable;

Теперь предположим, что вам нужно открыть другое соединение, чтобы вы могли видеть эти незафиксированные данные. Вы можете сделать это на уровне запроса, используя подсказку запроса NOLOCK . Например:

SELECT * FROM TestTable WITH(NOLOCK)
0 голосов
/ 18 января 2011

Да, вам нужно включить грязное чтение, иначе READ UNCOMMITTED

Редактировать:

Чтобы прочитать оба набора данных, вам потребуется комбинация «изоляция снимка» в одном соединении ичитать "незафиксировано" в другом.

YMMV.Это не что-то ...

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