2011-08-23 19 views
6

Me encantan las claves externas, pero me encuentro con un problema con ellas. Tengo un programa de conversión en el que estoy deshabilitando las claves externas a las tablas. La razón por la que estoy haciendo esto es para poder reconvertir todos los registros en la tabla principal, pero deje las otras tablas en función de eso intactas sin tener que reconvertirlas cada vez porque son ENORMES.Habilitar clave externa con Verificar datos existentes

estoy usando estos comandos para deshabilitar y volver a habilitar las claves externas:

ALTER TABLE MyTable NOCHECK CONSTRAINT MyConstraint

ALTER TABLE MyTable restricción CHECK MyConstraint

Sin embargo, después de que re- habilitar la restricción "Comprobar los datos existentes en la creación o la readaptación" aún está establecida en No. Entiendo que está configurado en No porque deshabilité la restricción, pero al hacerlo modifiqué el esquema de la base de datos, lo que no me gusta . Pensé que esto se consideraría volver a habilitar la restricción y verificaría los datos existentes, pero aparentemente no.

¿No hay forma de cambiar esto con el comando ALTER TABLE? Sé que puedo si elimino la restricción y la vuelvo a crear, pero no voy a escribir la secuencia de comandos para recrear todas las claves externas que tengo y mantener eso.

Estoy usando SQL Server 2008 R2.

Respuesta

9

Para volver a habilitar una restricción:

-- Enable the constraint 
ALTER TABLE MyTable 
WITH CHECK CHECK CONSTRAINT MyConstraint 
GO 

Nota: usted tiene que especificar CHECK dos veces para forzar una comprobación de que todos los valles de claves externas son válidos.

CLAVE Exterior y restricciones de comprobación que sean discapacidad están marcadas is_not_trusted.These se pueden ver en las sys.check_constraints y vistas de catálogo sys.foreign_keys. Esto significa que la restricción no es más tiempo siendo verificada por el sistema para todas las filas de la tabla. Incluso cuando vuelve a habilitar la restricción, no volverá a verificar las filas existentes en la tabla a menos que especifique la opción WITH CHECK de ALTER TABLE. Especificar WITH CHECK marca la restricción como de confianza otra vez.

Ref .: Guidelines for Disabling Indexes and Constraints

Como se señaló en los comentarios (para motores de búsqueda), esto corresponde a

sys.foreign_keys.is_not_trusted

en la vista de catálogo

+0

Gracias, eres un salvavidas. –

+1

Para el registro, porque me costó encontrarlo en otro lugar: "sys.foreign_keys.is_not_trusted" corresponde a "Comprobar los datos existentes en la creación o reactivación" en el cuadro de diálogo "Relaciones de clave externa" de SQL Server Management Studio. – leqid

Cuestiones relacionadas