使用.NET中的SQL Server,是否可以(使用相同或单独的连接)读取基础数据以及来自另一个单独连接的尚未提交的更改?
例如:
我有Connection1,它启动一个事务并将Id == 1的记录插入表中但不提交
从Connection2,我想阅读没有该行存在的表
从Connection2或Connection3,我想阅读包含现有行的表。
答案 0 :(得分:0)
是的,您需要启用脏读,即READ UNCOMMITTED
编辑:
要读取这两组数据,您需要在一个连接中组合使用“快照隔离”,在另一个连接中使用“未提交读”。
YMMV。这不是......
答案 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)