首页 > 解决方案 > T-SQL 是否具有在事务开始时读取行的机制?

问题描述

我一直无法找到解决此问题的文档,并且我尝试了可序列化和快照隔离级别都没有任何好处。

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

我确信我可以仔细地对事物进行排序并可能使用临时表来完成我的功能,但是如果有一个查询提示或隔离级别可以简化我的代码,我想使用它!

标签: sql-servertsqltransactionsisolation-level

解决方案


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

如果该表确实是常规表,则可以在语句中添加该output子句update捕获以前的版本:

declare @t table(...);

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

如果通过的表是时态表,可以访问之前的版本:

declare @before_update datetime = getdate();

update ... ;

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

请注意,鉴于 SQL Server 的并发特性,这可能不是您想要的。= getdate()如果另一笔交易介于您的和之间,它可能会返回有点太旧的数据update


推荐阅读