2010-02-12 5 views
24

Le message d'erreur que je obtenir lorsque vous essayez de supprimer une colonne:Comment supprimer une colonne avec des dépendances d'objet dans SQL Server 2008?

L'objet « defEmptyString » dépend de la colonne « fkKeywordRolleKontakt ».

Msg 5074, niveau 16, état 1, ligne 43

ALTER TABLE DROP COLUMN fkKeywordRolleKontakt a échoué car un ou plusieurs objets accéder à cette colonne.

J'ai déjà essayé de trouver les contraintes par défaut, tel que décrit ici: SQL Server 2005 drop column with constraints

Malheureusement sans succès :(La ligne de retour est:

fkKeywordRolleKontakt 2 814625945 0 defEmptyString 

Et je ne peux pas enlever l'une des fkKeywordRolleKontakt et defEmptyString

Quelle est la bonne façon de se débarrasser de cette dépendance?

EDIT: Peut-être que c'est aussi important. La colonne fkKeywordRolleKontakt est de type udKeyword (nvarchar (50)) avec la valeur par défaut dbo.defEmptyString.


Edit 2: Résolu

je pouvais résoudre le problème maintenant. Je suis désolé, je ne l'ai pas copier le message d'erreur complet, qui était:

Msg 5074, Level 16, State 1, Line 1
The object 'defEmptyString' is dependent on column 'fkKeywordRolleKontakt'.
Msg 5074, Level 16, State 1, Line 1
The object 'FK_tlkpRolleKontakt_tlkpKeyword' is dependent on column 'fkKeywordRolleKontakt'.
Msg 4922, Level 16, State 9, Line 1
ALTER TABLE DROP COLUMN fkKeywordRolleKontakt failed because one or more objects access this column.

je pourrais générer un script pour supprimer la colonne par un clic droit sur l'entrée de la colonne (dbo.tlkpRolleKontakt> Colonnes> fkKeywordRolleKontakt) (dans le Gestionnaire de serveur MSSQL), en sélectionnant Modifier et en supprimant la colonne. Ensuite, le tableau Designer> Générer le changement de script généré les commandes nécessaires:

ALTER TABLE dbo.tlkpRolleKontakt 
    DROP CONSTRAINT FK_tlkpRolleKontakt_tlkpKeyword 
EXECUTE sp_unbindefault N'dbo.tlkpRolleKontakt.fkKeywordRolleKontakt' 
ALTER TABLE dbo.tlkpRolleKontakt 
    DROP COLUMN fkKeywordRolleKontakt 

Ca y est :)

+0

Merci, vous devez ajouter votre modification comme réponse et l'accepter. – Sprockincat

+0

@Sprockincat Terminé. –

Répondre

3

je pouvais résoudre le problème maintenant. Je suis désolé, je ne l'ai pas copier le message d'erreur complet, qui était:

Msg 5074, niveau 16, état 1, ligne 1
L'objet « defEmptyString » dépend de la colonne « fkKeywordRolleKontakt ».

Msg 5074, niveau 16, état 1, ligne 1
L'objet 'FK_tlkpRolleKontakt_tlkpKeyword' dépend de la colonne 'fkKeywordRolleKontakt'.
Msg 4922, niveau 16, état 9, ligne 1 ALTER TABLE DROP COLUMN fkKeywordRolleKontakt a échoué car un ou plus d'objets accéder à cette colonne.

je pourrais générer un script pour supprimer la colonne par un clic droit sur l'entrée de la colonne (dbo.tlkpRolleKontakt> Colonnes> fkKeywordRolleKontakt) (dans MSSQL Server Manager), en sélectionnant Modifier et supprimer la colonne. Puis, le Concepteur de table> Générer le script de modification a généré les commandes nécessaires:

ALTER TABLE dbo.tlkpRolleKontakt 
    DROP CONSTRAINT FK_tlkpRolleKontakt_tlkpKeyword 
EXECUTE sp_unbindefault N'dbo.tlkpRolleKontakt.fkKeywordRolleKontakt' 
ALTER TABLE dbo.tlkpRolleKontakt 
    DROP COLUMN fkKeywordRolleKontakt 
+1

merci, je ne savais pas que nous pourrions délier un défaut (semble évident maintenant) – Disturb

36

Avez-vous essayé d'abord:

ALTER TABLE <tablename> DROP CONSTRAINT defEmptyString; 

?

+2

Oui, je l'ai fait. J'ai alors reçu un message que defEmptyString n'est pas une contrainte sur cette table. –

+1

Alors, que se passe-t-il avec cette requête: SELECT OBJECT_NAME (parent_object_id) FROM sys.default_constraints WHERE name = 'defEmptyString'; -? Avez-vous un résultat, si oui, est-ce que c'est cette table? Si vous n'obtenez pas de résultat, qu'en est-il de: SELECT type_desc FROM sys.objects WHERE name = 'defEmptyString'; -? –

+0

Aucun résultat pour le premier et pour la deuxième ligne: type_desc DEFAULT_CONSTRAINT –

2

utiliser ce script pour annuler la vérification de la contrainte:

ALTER TABLE @tablename NOCHECK CONSTRAINT @constraintname 
+0

Il ne semble pas y avoir de contrainte: Msg 11415, Niveau 16, État 1, Ligne 1 L'objet 'defEmptyString' ne peut pas être désactivé ou activé. Cette action s'applique uniquement aux contraintes de clé étrangère et de vérification. Msg 4916, niveau 16, état 0, ligne 1 Impossible d'activer ou de désactiver la contrainte. Voir les erreurs précédentes. –

-1

je suis tombé sur une solution plus simple.

  1. SUPPRIMER les données de cette colonne.
  2. Une fois que la colonne n'a pas de valeur à l'intérieur ne -

ALTER TABLE <table_name> DROP COLUMN <column_name>

De cette façon, la colonne est facilement abandonnée.

P.S - C'est un mal de tête si vous avez comme des quantités extrêmes de données dans la colonne.

+0

ahh, et qu'en est-il des données qui ont été supprimées ... –

+1

Non invalide les clés étrangères ne permettront pas cela –

7

baisse la contrainte qui dépend de cette colonne avec

ALTER TABLE TableName DROP CONSTRAINT dependent_constraint 

puis déposez Colonne:

ALTER TABLE TABLE_NAME DROP COLUMN COLUMN_NAME 

dependent_constraint: cette contrainte est montré dans l'erreur quand nous essayons pour supprimer la colonne dépendante.

Exemple: en essayant de laisser tomber une colonne IsDeleted2

Erreur

L'objet 'DF__Employees__IsDel__15502E78' dépend de la colonne 'IsDeleted2'.

ALTER TABLE DROP COLUMN IsDeleted2 a échoué car un ou plusieurs objets accèdent à cette colonne.

erreur indique clairement que nous devons supprimer DF__Employees__IsDel__15502E78 contrainte

ALTER TABLE Employess 
DROP CONSTRAINT DF__Employees__IsDel__15502E78; 

Goutte Colonne:ALTER TABLE Employess DROP COLUMN IsDelted2

Questions connexes