マイクロソフトの記事のように、パーティションスイッチングを使用して、ステージングテーブルのインデックスをパーティションテーブルにドロップせずに再構築しています。
私は要約すると
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 ...)を実行できます。
選択を許可しながらこれをブロックするにはどうすればよいですか?