Answers:
是的,如果更改查询已修改数据的会话的事务隔离级别(在SSMS中称为“窗口”),则是可能的。通常这不是一个好主意,因为您可能会得到一些意想不到的结果。仔细考虑副作用。我不知道是否可以在Excel Power Query中更改事务隔离级别。
例如,以下查询集将插入一些数据并正确显示更新,即使没有提交/回滚也是如此。
-- Session 1
begin tran tx_test;
-- Assume the Test table exists and insert is okay
insert dbo.Test(datadate, content) values (getdate(), 'transaction');
select * from Test; -- Shows the new data
-- After select, one would execute one of the following
-- commit;
-- rollback;
同时,第二个会话执行的选择似乎没有任何作用:
-- Session 2
-- This waits for uncommitted transaction
-- and returns results after 1st session commits/rollbacks
select * from Test;
创建第三个会话并更改其隔离级别:
-- Session 3
set transaction isolation level read uncommitted;
-- This reads the inserted data from the 1st session, even before commit
select * from Test;
作为最佳实践,事务应保持尽可能短,并且不要等待用户交互;每次在事务中执行某种类型的数据或架构修改时,都会在已触摸/修改的对象或行上放置锁,从而使其他用户的查询处于等待状态。这反过来会产生连锁效应,使您的数据库服务器陷入停顿。
在您描述的场景中,我建议您制作一份数据副本以分隔“假设分析”表,您可以在其中进行修改并查看结果。对结果满意后,请使用事务将该表的数据合并回原始表。