sql-server - sp3 - sql server 2005 full iso
Diferencia Check/NoCheck de SQL Server en los scripts generados (3)
¡El resultado final no es el mismo!
SQL Server no confiará en la unicidad del FK si no está marcado. Esto significa que se requiere un procesamiento adicional si utiliza la columna en una consulta.
La larga historia corta es que debería hacer que SQL Server verifique la columna para que se considere confiable.
En cuanto a por qué son diferentes de los diferentes servidores, verifique la columna no confiada en sys.foreign_keys. Esto puede afectar lo que SSMS está generando?
Para más información sobre esto, revise mi otra respuesta relacionada con las opciones FK & NO CHECK / CHECK.
Estoy tratando de sincronizar los esquemas entre diferentes bases de datos. Básicamente, ejecuté tareas-> Generar scripts con SQL Server Management Studio (2005) en ambas bases de datos y estoy comparando el resultado con una herramienta de diferencias.
Por alguna razón, una secuencia de comandos agrega la restricción WITH CHECK y la otra WITH NO CHECK , seguidas de que ambas restricciones se vuelven a habilitar.
Yo por la primera base de datos que obtengo:
ALTER TABLE [dbo].[Profile] WITH CHECK ADD CONSTRAINT [FK_Profile_OrganizationID] FOREIGN KEY([OrganizationID])
REFERENCES [dbo].[Organization] ([OrganizationID])
GO
ALTER TABLE [dbo].[Profile] CHECK CONSTRAINT [FK_Profile_OrganizationID]
GO
La segunda base de datos genera como
ALTER TABLE [dbo].[Profile] WITH NOCHECK ADD CONSTRAINT [FK_Profile_OrganizationID] FOREIGN KEY([OrganizationID])
REFERENCES [dbo].[Organization] ([OrganizationID])
GO
ALTER TABLE [dbo].[Profile] CHECK CONSTRAINT [FK_Profile_OrganizationID]
GO
Así que tengo dos preguntas:
¿El resultado final es el mismo? ( Edit: Parece que mucha gente está captando solo la primera declaración de los dos guiones. Estoy interesado en el resultado final de la totalidad de los dos guiones).
Si el resultado final es el mismo, ¿por qué Management Studio los genera de manera diferente para diferentes bases de datos?
¿Ambos son servidores SQL Server 2005? Como el resultado es el mismo, la herramienta de generación de código puede usar diferentes rutinas basadas en diferentes versiones del producto
Sí, los dos guiones son diferentes.
WITH CHECK verificará los datos existentes contra la nueva restricción.
WITH NOCHECK no comparará los datos existentes con la nueva restricción. Esto le permitirá tener registros secundarios sin un padre correspondiente.
EDIT: En cuanto a por qué SSMS está haciendo esto, no tengo idea