estoy mirando a la base de datos de ejemplo AdventureWorks de SQL Server 2008, y veo en sus scripts de creación que tienden a utilizar lo siguiente:con la restricción de verificación Agregar seguido de restricción CHECK CONSTRAINT vs ADD
ALTER TABLE [Production].[ProductCostHistory] WITH CHECK ADD
CONSTRAINT [FK_ProductCostHistory_Product_ProductID] FOREIGN KEY([ProductID])
REFERENCES [Production].[Product] ([ProductID])
GO
seguido inmediatamente por:
ALTER TABLE [Production].[ProductCostHistory] CHECK CONSTRAINT
[FK_ProductCostHistory_Product_ProductID]
GO
veo esto para las claves externas (como en este caso), y restricciones únicas limitaciones CHECK
regulares; DEFAULT
limitaciones utilizan el formato normal estoy más familiarizado con tales como:
ALTER TABLE [Production].[ProductCostHistory] ADD CONSTRAINT
[DF_ProductCostHistory_ModifiedDate] DEFAULT (getdate()) FOR [ModifiedDate]
GO
¿Cuál es la diferencia, si la hay, entre hacerlo de la primera forma con respecto al segundo?
Parece que WITH CHECK no es el valor predeterminado, solo es el valor predeterminado para los datos nuevos. Desde http://msdn.microsoft.com/en-us/library/ms190273.aspx: "Si no se especifica, se supone que WITH CHECK para las nuevas restricciones, y WITH NOCHECK se supone para las restricciones habilitadas nuevamente". –
@ZainRizvi: no hay datos nuevos, nuevas restricciones. Si desactiva una restricción con 'ALTER TABLE foo NOCHECK CONSTRAINT fk_b' y luego la vuelve a habilitar con' ALTER TABLE foo CHECK CONSTRAINT fk_b', no verifica la restricción. 'ALTER TABLE foo WITH CHECK CHECK CONSTRAINT fk_b' es necesario para que se verifiquen los datos. – jmoreno
No estaba claro para mí leer esto inicialmente. La segunda línea (redundante) es la función para activar la restricción. Como la restricción está activada por defecto, la segunda línea es redundante. – blindguy