Desde el Explorador de objetos en SQL Server, al seleccionar y escribir una restricción de clave foránea, se genera el siguiente código.
USE [MyTestDatabase]
GO
ALTER TABLE [dbo].[T2] WITH NOCHECK ADD CONSTRAINT [FK_T2_T1] FOREIGN KEY([T1ID])
REFERENCES [dbo].[T1] ([T1ID])
GO
ALTER TABLE [dbo].[T2] CHECK CONSTRAINT [FK_T2_T1]
GO
¿Cuál es el propósito de la última declaración "ALTER TABLE CHECK CONSTRAINT"? No parece importar si se ejecuta o no. No falla en los datos incorrectos existentes, ni cambia que la restricción se aplicará a los datos nuevos.
¡Gracias!
fuente
Su primera declaración crea una restricción deshabilitada. Necesita ser habilitado y posiblemente confiable. La siguiente sintaxis extraña asegurará que su restricción esté habilitada y confiable:
Hay una muy buena publicación de blog de Hugo Kornelis que lo explica en detalle: ¿Puedes confiar en tus limitaciones?
fuente