2010-09-18 12 views
0

J'ai une table avec un ensemble de FK.Mise à jour de la table SQL dans Enterprise Manager - Problèmes de clé étrangère

Table Vehicles 
----------- 
ColorID -> Color.ID 
MakeID -> Make.ID 
ModelID -> Model.ID 
etc... 

Mon problème est que j'ai oublié quelques colonnes et j'ai besoin de les ajouter. Je peux les ajouter en faisant un clic droit sur la table et en choisissant 'Design', mais pas si je veux les rendre NOT NULL, ou supprimer une colonne. Je pourrais aussi générer une baisse/Créer script, mais je reçois cette erreur:

Msg 3726, Level 16, State 1, Line 4 
Could not drop object 'dbo.SellVehicles' because it is referenced by a FOREIGN KEY constraint. 

Ai-je besoin de passer par et supprimer chaque FK puis déposer/créer, puis les ajouter ou est-il un moyen rapide/indolore façon de faire cela? Y a-t-il un moyen d'abandonner et de recréer ces FK rapidement?

Pourquoi ne pas

IF EXISTS (SELECT * FROM sys.foreign_keys WHERE object_id = OBJECT_ID(N'[dbo].[FK_SellVehicles_Conditions]') AND parent_object_id = OBJECT_ID(N'[dbo].[SellVehicles]')) 
ALTER TABLE [dbo].[SellVehicles] DROP CONSTRAINT [FK_SellVehicles_Conditions] 
GO 

éliminer cette erreur? Le FK est-il toujours sur l'autre table référencée?

Répondre

4

La contrainte qui déclenche l'erreur est pas sur la table dbo.SellVehicles; c'est sur une table que référence la table dbo.SellVehicles. Les références aux tables Couleur, Marque et Modèle ne sont pas le problème - vous essayez de supprimer/supprimer l'enfant dans une relation parent-enfant.

Je doute que la contrainte que vous avez testée existait avant le ALTER TABLE ... DROP CONSTRAINT ....

Dans SSMS, vous pouvez faire un clic droit sur une table et sélectionner "Dépendances". Un bouton radio permet de sélectionner les objets qui dépendent de la table dbo.SellVehicles ou les éléments dont dépend la table dbo.SellVehicles.

+0

@Blankasaurus: Oui, vous devez supprimer/désactiver la dépendance sur la table 'dbo.SellVehicles' avant de pouvoir la supprimer. –

+0

C'était une contrainte FK sur la table parente qui faisait référence à la table que j'essayais de modifier. Donc, disons que j'avais 20 dépendances, y a-t-il un moyen rapide de générer un script qui supprimerait/créerait tous les FK sur ces tables qui dépendaient de la table que j'essayais de modifier? – Jason

+0

Désactiver ... Est-ce que "Enforce FK Contraint" = Non? – Jason