如果某个其他查询在SQL Server中已经存在的表上应用了一个tablock,我们可以插入到表中吗?

时间:2015-11-05 13:50:28

标签: sql-server-2012

我正在尝试使用insert into...select语句(带TABLOCK)在表中插入一些记录。但我无法这样做。

事情就是已经在表上应用了一些其他查询TABLOCK。这是什么原因?

当我尝试插入没有tablock时,它会被插入。

Truncate和Drop语句也无效。

1 个答案:

答案 0 :(得分:0)

WITH (TABLOCK)更改了SQL Server锁定的行为 - 而不是仅锁定受影响的行,它会锁定整个表

因此,如果你进行了INSERT操作,它将放置一个独占的,表范围的锁定 - 现在没有任何其他操作可以以任何方式访问该表,直到第一个事务拿着锁完了。

如果没有(TABLOCK)提示,SQL Server只对要插入的行放置排他锁 - 任何其他行仍然可以访问(甚至可以更新或删除)。

WITH (TABLOCK)是一个沉重的大锤 - 小心使用它!