J'essaie de synchroniser les schémas entre différentes bases de données. Fondamentalement, j'ai exécuté des tâches -> Générer des scripts avec SQL Server Management Studio (2005) sur les deux bases de données et je compare la sortie avec un outil de diff.Différence SQL Check Check/NoCheck dans les scripts générés
Pour une raison quelconque, un script ajoute la contrainte AVEC CONTRÔLE et un SANS CONTROLE, suivi par les deux contraintes étant réactivée.
I pour la première base de données je reçois:
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 seconde base de données génère comme
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
J'ai donc deux questions:
est le résultat final de la même ? (Edit: Il semble que beaucoup de gens ramassent uniquement la première déclaration des deux scripts que je suis intéressé par le résultat final de l'ensemble des deux scripts..)
Si la fin Le résultat est le même, pourquoi Management Studio les génère-t-il différemment pour différentes bases de données?
Cependant, si vous regardez les deux scripts, immédiatement après l'ajout de la contrainte, il y a ALTER TABLE [ dbo]. [Profile] CHECK CONSTRAINT [FK_Profile_OrganizationID] GO Cela ne vérifie-t-il pas les contraintes à ce moment-là? – Nathan
En ce qui concerne la deuxième partie de votre réponse, vous avez en effet raison que is_not_trusted est défini sur l'une des bases de données, et non sur l'autre. Quel effet cela a-t-il? – Nathan
Trouvé cet article: http://sqlblog.com/blogs/tibor_karaszi/archive/2008/01/12/non-trusted-constraints.aspx Il semble donc que la deuxième déclaration dans le lot assure seulement que la contrainte est activée, il ne vérifie pas réellement les données existantes. Pour réellement vérifier les données existantes, je dois ALTER TABLE? AVEC CHECK CHECK CONSTRAINT tous – Nathan