que he tenido que consiguen las funciones de partición para trabajar a gran escala. CREATE y DROP PARTITION son operaciones de bloqueo, y tienes poco control sobre el bloqueo, y si no puede obtener un bloqueo fallará con un nivel de gravedad 16 y matará tu conexión, que no puedes atrapar y volver a intentar sin restablecer la conexión. Pero podría funcionar bien para ti. Además, se requiere MSS Enterprise Edition, no se puede usar SE, podría ser demasiado para algunas tiendas más pequeñas o más costosas.
También encontré la vista redef para bloquear a gran escala (= volumen de transacciones + volumen puro de datos insertados constantemente, en mi caso) en tablas y objetos sys, por lo que esas operaciones pueden estancarse en cosas como reindexar y DTCCs - y en un caso, específicamente con un usuario en SSMS (de todas las cosas) tratando de explorar vistas en el Explorador de Objetos (alguien necesita decirles a esos tipos sobre READPAST). Nuevamente, su millaje puede variar.
En contraste, el sp_rename funciona bien para mí a escala: le da control sobre el bloqueo y el alcance del mismo. Para resolver el problema de bloqueo antes del intercambio, pruébelo como se muestra a continuación. A primera vista, esto parece tener el mismo problema de escala a gran volumen ... pero no lo he visto en la práctica. Entonces, funciona para mí ... pero una vez más, las necesidades y experiencias de todos son diferentes.
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
Estoy usando SQL server 2000. IpToCountryOld es irrelevante y podría haberse truncado y eliminado. Estoy cambiando el nombre porque es más rápido, luego elimino la tabla anterior ... –