Le message d'erreur que j'obtiens en essayant de supprimer une colonne:
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èdent à cette colonne.
J'ai déjà essayé de trouver les contraintes par défaut, comme décrit ici: colonne de dépôt SQL Server 2005 avec contraintes
Malheureusement sans succès :( La ligne retournée est:
fkKeywordRolleKontakt 2 814625945 0 defEmptyString
Et je ne peux supprimer ni fkKeywordRolleKontakt
ni defEmptyString
.
Quelle est la bonne façon de se débarrasser de cette dépendance?
EDIT: C'est peut-être aussi important. La colonne fkKeywordRolleKontakt est de type udKeyword (nvarchar (50)) avec par défaut dbo.defEmptyString
.
Edit 2: Résolu
Je pourrais résoudre le problème maintenant. Je suis désolé, je n'ai pas copié 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 pouvais générer un script pour supprimer la colonne en cliquant avec le bouton droit sur l'entrée de colonne (dbo.tlkpRolleKontakt> Colonnes> fkKeywordRolleKontakt) (dans le Gestionnaire de serveur MSSQL), en sélectionnant Modifier et en supprimant la colonne. Ensuite, Table Designer> Generate Change Script 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
C'est ça :)
Je pourrais résoudre le problème maintenant. Je suis désolé, je n'ai pas copié 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 plusieurs objets accèdent à cette colonne.
Je pouvais générer un script pour supprimer la colonne en cliquant avec le bouton droit sur l'entrée de colonne (dbo.tlkpRolleKontakt> Colonnes> fkKeywordRolleKontakt) (dans le Gestionnaire de serveur MSSQL), en sélectionnant Modifier et en supprimant la colonne. Ensuite, Table Designer> Generate Change Script 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
Avez-vous essayé en premier:
ALTER TABLE <tablename> DROP CONSTRAINT defEmptyString;
?
supprimez la contrainte qui dépend de cette colonne avec
ALTER TABLE TableName DROP CONSTRAINT dependent_constraint
puis déposer la colonne:
ALTER TABLE TABLE_NAME DROP COLUMN COLUMN_NAME
dependent_constraint: cette contrainte est affichée dans l'erreur lorsque nous essayons de supprimer la colonne dépendante.
Exemple: essayer de supprimer une colonne IsDeleted2
Erreur
L'objet 'DF__Employees__IsDel__15502E78' dépend de la colonne 'IsDeleted2'.
Échec de ALTER TABLE DROP COLUMN IsDeleted2 car un ou plusieurs objets accèdent à cette colonne.
L'erreur indique clairement que nous devons supprimer DF__Employees__IsDel__15502E78
contrainte
ALTER TABLE Employess
DROP CONSTRAINT DF__Employees__IsDel__15502E78;
Supprimer la colonne:ALTER TABLE Employess DROP COLUMN IsDelted2
utilisez ce script pour annuler la vérification de la contrainte:
ALTER TABLE @tablename NOCHECK CONSTRAINT @constraintname
Je suis tombé sur une solution plus simple.
ALTER TABLE <table_name> DROP COLUMN <column_name>
De cette façon, la colonne est facilement supprimée.
P.S - C'est un casse-tête si vous avez des quantités extrêmes de données dans la colonne.