使用UNION ALL时锁定获取

时间:2011-07-04 09:43:47

标签: sql sql-server tsql

道歉这是一个非常简单的问题,但我似乎无法在任何地方找到答案..

当使用UNION ALL查询运行查询时(如下所示),SQL确保在数据获取之前将锁定放在两个表上,或者是锁是否在每个表上独立放置,通过查看执行计划似乎就是这种情况。

select i from T1 with (updlock, holdlock) 
UNION ALL 
select i from T2 with (updlock, holdlock)

1 个答案:

答案 0 :(得分:1)

在读取时,将从每个表的每一行上获取一个updlock。根据表的大小,您可能会看到升级。如果要在读取任何数据之前强制锁定两个表,请指定tablock提示。

启动Profiler,创建一个空的跟踪定义,过滤到您的测试数据库并添加Lock:Acquired,Lock:Released事件,您可以看到序列。