У меня были проблемы с настройкой функций секционирования. CREATE и DROP PARTITION являются блокирующими операциями, и у вас мало контроля над блокировкой, и, если она не может получить блокировку, она потерпит неудачу с уровнем серьезности 16 и разорвет ваше соединение - которое вы не можете перехватить и повторить без восстановления связь. Но это может работать просто отлично для вас. Кроме того, MSS Enterprise Edition требуется, вы не можете использовать SE - может быть слишком много для некоторых небольших или более дорогих магазинов.
Я также обнаружил, что представление redef блокирует в высоком масштабе (= объем транзакции + объем постоянно вставляемых данных, в моем случае) для таблиц и объектов sys, поэтому эти операции могут зайти в тупик при таких вещах, как переиндексация и DTCC - и в одном случае, особенно с пользователем в 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