パーティショニング関数を大規模に機能させるのに問題がありました。CREATE と DROP PARTITION はブロッキング操作であり、ブロッキングをほとんど制御できません。ロックを取得できない場合、重大度レベル 16 で失敗し、接続を切断します。これをトラップして再確立せずに再試行することはできません。接続。しかし、それはあなたにとってうまくいくかもしれません。また、MSS Enterprise Edition が必要です。SE を使用することはできません。小規模なショップやコストを重視するショップにとっては多すぎる可能性があります。
また、ビューの再定義が sys テーブルとオブジェクトで大規模 (= トランザクション ボリューム + 常に挿入される膨大な量のデータ) でブロックされることも発見しました。あるケースでは、特に SSMS の (すべての) ユーザーがオブジェクト エクスプローラーでビューを参照しようとしています (誰かが READPAST についてそれらの人に伝える必要があります)。繰り返しますが、走行距離は異なる場合があります。
対照的に、sp_rename は大規模にうまく機能します。これにより、ロックとその範囲を制御できます。スワップ前にブロックの問題を解決するには、以下に示すように試してください。額面どおり、これは大容量で同じ規模の問題を抱えているように見えますが、実際には見たことがありません。だから、私にはうまくいきます... しかし、繰り返しになりますが、ニーズや経験は人それぞれ異なります。
DECLARE @dummylock bit
BEGIN TRANSACTION
BEGIN TRY
-- necessary to obtain exclusive lock on the table prior to swapping
SELECT @dummylock = 1 WHERE EXISTS (SELECT 1 FROM A WITH (TABLOCKX))
-- may or may not be necessary in your case
SELECT @dummylock = 1 WHERE EXISTS (SELECT 1 FROM B WITH (TABLOCKX))
exec sp_rename 'A', 'TEMP'
exec sp_rename 'B', 'A'
exec sp_rename 'TEMP', 'B'
COMMIT TRANSACTION
END TRY
BEGIN CATCH
-- other error handling here if needed
ROLLBACK TRANSACTION
END CATCH