Comment supprimer une colonne qui a une contrainte par défaut dans SQL Server 2008?
Ma requête est
alter table tbloffers
drop column checkin
Je reçois une erreur en dessous
L'archivage ALTER TABLE DROP COLUMN a échoué car un ou plusieurs objets accèdent à cette colonne.
Quelqu'un peut-il corriger ma requête pour supprimer une colonne avec contrainte?
sql-server
sql-server-2008
Robin Michael Poothurai
la source
la source
Réponses:
Vous devez d'abord supprimer le problème
DEFAULT constraint
, après cela, vous pouvez supprimer la colonneMais l'erreur peut provenir d'autres raisons - par exemple la fonction définie par l'utilisateur ou la vue avec des
SCHEMABINDING
options définies pour elles.UPD: Script d'abandon de contraintes entièrement automatisé:
la source
Voici une autre façon de supprimer une contrainte par défaut avec un nom inconnu sans avoir à exécuter au préalable une requête distincte pour obtenir le nom de la contrainte:
la source
Vous pouvez également supprimer la colonne et ses contraintes dans une seule instruction plutôt qu'individuellement.
Un SQL dynamique qui recherchera les noms des contraintes de vérification dépendantes et des contraintes par défaut et les déposera avec la colonne est ci-dessous
(mais pas les autres dépendances de colonne possibles telles que les clés étrangères, les contraintes de clé unique et primaire, les colonnes calculées, les index)
la source
DROP CONSTRAINT
voir la grammaire. Si vous ne nommez pas les contraintes explicitement, vous devrez rechercher le nom que SQL Server a généré pour cela, par exemple selon la réponse de marc. Mais après avoir découvert cela, vous pouvez toujours supprimer la contrainte et la colonne en même temps.Trouvez la contrainte par défaut avec cette requête ici:
Cela vous donne le nom de la contrainte par défaut, ainsi que le nom de la table et de la colonne.
Lorsque vous disposez de ces informations, vous devez d'abord supprimer la contrainte par défaut:
et puis vous pouvez déposer la colonne
la source
ALTER TABLE table DROP CONSTRAINT DF_XY DROP COLUMN XY
Malheureusement, la syntaxe de cette déclaration n'est pas correcteDROP
commandes pour que cela fonctionneCe qui suit a fonctionné pour moi contre un backend SQL Azure (en utilisant SQL Server Management Studio), donc YMMV, mais, si cela fonctionne pour vous, c'est waaaaay plus simple que les autres solutions.
la source
J'ai le même:
Échec de ALTER TABLE DROP COLUMN car un ou plusieurs objets accèdent à ce message de colonne .
Ma colonne avait un index qui devait d'abord être supprimé. L'utilisation de sys.indexes a fait l'affaire:
la source
J'ai un peu mis à jour le script de ma version de serveur SQL
la source
Ce n'est pas toujours simplement une contrainte par défaut qui empêche de supprimer une colonne et parfois les index peuvent également vous empêcher de supprimer la contrainte. J'ai donc écrit une procédure qui supprime tout index ou contrainte sur une colonne et la colonne elle-même à la fin.
la source