5

He cometido un error al crear una clave principal en clúster en la columna GUID. Hay muchas tablas que hacen referencia a esa tabla con claves externas definidas. El tamaño de la tabla no es significativo.Cómo convertir la clave primaria en clúster a no agrupado sin eliminar las claves externas de referencia en SQL Server 2005

Me gustaría convertirlo de agrupado a no agrupado sin tener que soltar manualmente y volver a crear las claves externas o incluso la restricción de la clave principal.

¿Es posible lograr eso en MS SQL2005 y cómo es si?

¿Es posible lograr eso EN LÍNEA (sin tiempo de inactividad db) si es así?

Respuesta

3

Puede intentar crear primero el índice NC único no agrupado y luego soltar el PK agrupado. El FK debería reconocer este otro índice (pero podría no: nunca lo intentó).

Cuando ejecuta ALTER TABLE para soltar el PK agrupado, utilice la opción ONLINE. Sin embargo, solo está disponible en la edición Enterprise.

ALTER TABLE Mytable DROP CONSTRAINT PK_Mytable WITH (ONLINE = ON) 

No se puede usar EN LÍNEA para el bit ADD CONSTRAINT.

Básicamente, sus opciones son limitadas sin bloquear, o crear otra tabla primero y mover datos a través de ...

+2

Me gustaría poder obtener una respuesta sin palabra "tratar" ... – alpav

+0

@alpav: por desgracia, Probablemente solo deje caer el lote, arregle, recree. Y trate de recordar para la próxima vez :-) Pruébelo con una tabla de 200 millones de filas: eso es doloroso ... – gbn

+2

FKs no reconocen otro índice. Cuando intento eliminar la restricción PK incluso después de crear otra restricción única y desactivar la restricción de clave externa con ALTER TABLE Table2 NOCHECK CONSTRAINT FK_Table2_Table1, se queja de que "La restricción 'PK_Table1' está siendo referenciada por la tabla 'Table2', restricción de clave externa 'FK_Table2_Table1' . Solo dejar caer FKs funciona. – alpav

Cuestiones relacionadas