T-SQL 是否有从事务开始时读取行的机制?

Does T-SQL have a mechanism for reading rows as of beginning of transaction?

我一直找不到解决这个问题的文档,而且我尝试了可序列化和快照隔离级别都没有用。

我有兴趣在事务中查询 table,我修改了事务中的 table,但我的查询不知道这些数据修改。

我确定我可以仔细排序并可能使用临时 tables 来完成我的功能,但如果有查询提示或隔离级别可以简化我的代码,我想使用它!

在常规 table 中,您无权访问您在当前事务中修改的行的先前版本。

如果 table 确实是常规 table,您可以 add the output clause 到您的 update 语句来捕获以前的版本:

declare @t table(...);

update ...
set ...
output deleted.column1, ... into @t;

如果 table 是暂时的 table 通过,您 can 访问以前的版本:

declare @before_update datetime = getdate();

update ... ;

select ... from table ... for system_time as of @before_update;

请注意,考虑到 SQL 服务器的并发性质,这可能不是您想要的。如果在您的 = getdate()update 之间进行另一笔交易,您的数据可能 return 有点太旧了。