sql-server - T-SQL 是否具有在事务开始时读取行的机制?
问题描述
我一直无法找到解决此问题的文档,并且我尝试了可序列化和快照隔离级别都没有任何好处。
我有兴趣在事务期间查询表,我在事务中修改了表,但我的查询不知道这些数据修改。
我确信我可以仔细地对事物进行排序并可能使用临时表来完成我的功能,但是如果有一个查询提示或隔离级别可以简化我的代码,我想使用它!
解决方案
在常规表中,您无权访问您在当前事务中修改的行的先前版本。
如果该表确实是常规表,则可以在语句中添加该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
。
推荐阅读
- java - 几帧后对象变量变为 NaN
- c# - 将项目移动到特定文件夹时附加事件侦听器 Outlook VSTO
- java - Spring Cloud Contract:多个控制器
- hadoop - AWS EMR - 如何扩展 hdfs 容量
- javascript - 如何递归修改解析的 JSON 对象中的嵌套属性
- javascript - javascript bigint 到字节数组
- vba - 根据列中的多个值格式化行
- java - 权限被拒绝通过 Hadoop java API 访问 HDFS
- html-agility-pack - 如何在使用 HtmlAgilityPack 时获取 href 值?
- android - 地理定位器如何工作?