Vérifiez SQL Server / différence NoCheck dans les scripts générés

voix
16

Je suis en train de synchroniser les schémas entre différentes bases de données. Au fond, je courais Tasks-> 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.

Pour une raison quelconque, un script ajoute la contrainte WITH CHECK et une sans vérification , suivi par les deux contraintes étant réactivée.

I pour la première base de données que 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:

  1. Est -ce la fin de la même résultat? ( 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..)

  2. Si le résultat final est le même, pourquoi Management Studio ne les génère différemment pour différentes bases de données?

Créé 26/08/2009 à 23:49
source utilisateur
Dans d'autres langues...                            


3 réponses

voix
16

Le résultat final est pas la même chose!

SQL Server ne faire confiance à l'unicité de la FK est qu'il est pas cochée. Cela signifie un traitement supplémentaire est nécessaire si vous utilisez la colonne dans une requête.
Longue histoire courte est que vous devriez obtenir SQL Server pour vérifier la colonne il est donc considéré comme approuvé.

Quant à savoir pourquoi ils sont différents des serveurs différents, vérifiez la colonne isnottrusted dans sys.foreign_keys. Cela peut affecter ce SSMS génère?

Pour plus d'une diatribe sur ce sujet , consultez mon autre réponse qui se rapporte à FK & NO Options d' enregistrement / CHECK.

Créé 27/08/2009 à 03:29
source utilisateur

voix
12

Oui, ils les deux scripts sont différents

AVEC CHECK vérifie les données existantes contre la nouvelle contrainte.
AVEC NOCHECK ne vérifiera pas les données existantes contre la nouvelle contrainte. Cela vous permettra d'avoir des enregistrements enfants sans parent correspondant.

EDIT: Pour ce qui est pourquoi SSMS fait cela, je ne sais pas

Créé 27/08/2009 à 02:28
source utilisateur

voix
0

Les deux sont des serveurs SQL Server 2005? Comme le résultat est le même, l'outil de génération de code peut-être utiliser différentes routines basées dans différentes versions du produit

Créé 27/08/2009 à 02:51
source utilisateur

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more