读取底层和未提交的事务数据

时间:2011-01-18 12:53:21

标签: .net sql-server transactions

使用.NET中的SQL Server,是否可以(使用相同或单独的连接)读取基础数据以及来自另一个单独连接的尚未提交的更改?

例如:

我有Connection1,它启动一个事务并将Id == 1的记录插入表中但不提交

从Connection2,我想阅读没有该行存在的表

从Connection2或Connection3,我想阅读包含现有行的表。

2 个答案:

答案 0 :(得分:0)

是的,您需要启用脏读,即READ UNCOMMITTED

编辑:

要读取这两组数据,您需要在一个连接中组合使用“快照隔离”,在另一个连接中使用“未提交读”。

YMMV。这不是......

  1. 我试过
  2. 查看
  3. 的用途
  4. 我对
  5. 有信心

答案 1 :(得分:0)

如您所知,您可以查看当前会话中的未提交数据,如下所示:

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)