我正在尝试使用insert into...select
语句(带TABLOCK
)在表中插入一些记录。但我无法这样做。
事情就是已经在表上应用了一些其他查询TABLOCK
。这是什么原因?
当我尝试插入没有tablock时,它会被插入。
Truncate和Drop语句也无效。
答案 0 :(得分:0)
WITH (TABLOCK)
更改了SQL Server锁定的行为 - 而不是仅锁定受影响的行,它会锁定整个表。
因此,如果你进行了INSERT
操作,它将放置一个独占的,表范围的锁定 - 现在没有任何其他操作可以以任何方式访问该表,直到第一个事务拿着锁完了。
如果没有(TABLOCK)
提示,SQL Server只对要插入的行放置排他锁 - 任何其他行仍然可以访问(甚至可以更新或删除)。
WITH (TABLOCK)
是一个沉重的大锤 - 小心使用它!