我们可以插入到一个表如果TABLOCK被一些其他查询已经在SQL Server应用在桌子上?
问题描述:
我想插入使用insert into...select
语句表中的一些记录(含TABLOCK
)。但我无法这样做。我们可以插入到一个表如果TABLOCK被一些其他查询已经在SQL Server应用在桌子上?
事情是一些其他查询已经在表上应用TABLOCK
。这是原因吗?
当我试图插入没有tablock时,它正在插入。
截断和删除语句也不起作用。
答
WITH (TABLOCK)
更改SQL Server的锁定行为 - 锁定整个表而不锁定受影响的行。
所以,如果你有一个INSERT
操作下去,它会放置一个独家,表范围锁 - 没有其他的操作现在可以访问该表以任何方式,直到持有锁是第一笔交易就完成了。
没有(TABLOCK)
提示,SQL Server只被放置在插入的行独占锁 - 任何其他行仍然可以访问(甚至可以更新或删除)。
WITH (TABLOCK)
是一个大沉重的大锤 - 使用它注意!