我正在使用分区切换来重建临时表上的索引,而不像微软的文章中那样将它们放在分区表上。
我有什么归结为
BEGIN TRAN
ALTER INDEX IX_Working ON dbo.WorkingTable DISABLE
INSERT INTO dbo.WorkingTable ( Id, PartitionColumn, Values...)
SELECT Id, PartitionColumn, Values...
FROM PartitionedTable WITH (HOLDLOCK)
WHERE PartitionColumn <= @rightboundary
AND PartitionColumn > @leftboundary
INSERT INTO WorkingTable ( Id, PartitionColumn, Values...)
SELECT Id, PartitionColumn, Values...
FROM Imports
ALTER INDEX IX_Working ON WorkingTable REBUILD -- SLOW BIT
ALTER TABLE PartitionedTable SWITCH PARTITION @partition TO SwapTable
ALTER TABLE WorkingTable SWITCH TO PartitionedTable PARTITION @partition
TRUNCATE TABLE SwapTable
COMMIT
现在,在此操作期间,我需要阻止对正在重新索引的分区的任何更新,但仍允许它们在其他分区上进行。PartionedTable 已将锁升级设置为自动。我正在尝试使用 HOLDLOCK 执行此操作,但我仍然能够在慢速期间从另一个连接执行 INSERT INTO PartionedTable (Id, @somevalueInTheRange, Values...)。
如何在仍然允许选择的同时阻止它?