当使用UNION ALL
查询运行查询时(如下所示),SQL确保在数据获取之前将锁定放在两个表上,或者是锁是否在每个表上独立放置,通过查看执行计划似乎就是这种情况。
select i from T1 with (updlock, holdlock)
UNION ALL
select i from T2 with (updlock, holdlock)
答案 0 :(得分:1)
在读取时,将从每个表的每一行上获取一个updlock。根据表的大小,您可能会看到升级。如果要在读取任何数据之前强制锁定两个表,请指定tablock提示。
启动Profiler,创建一个空的跟踪定义,过滤到您的测试数据库并添加Lock:Acquired,Lock:Released事件,您可以看到序列。