Bonjour,
Je souhaiterais supprimer une colonne en utilisant du code. J'ai donc utilisé la syntaxe suivante : ALTER TABLE Nom_Table DROP Column Nom_Colonne.
Par contre, cela ne marche pas s'il y a des dépendance fonctionnelle appliqué à la colonne comme des valeurs par défaut. Je sais qu'il faut utiliser la syntaxe suivante : ALTER TABLE Nom_Table DROP CONSTRAINT Nom_Contrainte.
Mais le problème, c'est que je n'arrive pas à trouver les contraintes appliqués à la colonne. J'ai trouvé une éventuelle solution mais je suis pas sur que ca soit toujours bon.
Ca consiste à rechercher toutes les objets dépendant d'une table (colonne parent_obj) et en utilisant la colonne info de sysobjects (qui semble servir à stocker l'id de la colonne) et en faisant une restriction sur le type de l'objet recherché (ici 'D' pour la valeur par défaut) :
SELECT sysobjects.name
FROM sysobjects INNER JOIN
(
SELECT syscolumns.id ,colid
FROM dbo.syscolumns
INNER JOIN sysobjects On syscolumns.id = sysobjects.id
INNER JOIN systypes On syscolumns.xtype = systypes.xusertype
WHERE syscolumns.name = 'NumTickettmp'
AND sysobjects.name = 'ImportsVentes'
AND sysobjects.xtype='U'
) as TableColonne
ON TableColonne.id = sysobjects.parent_obj
AND TableColonne.colid = sysobjects.info
WHERE xType = 'D'
Quelqu'un peut il me dire si cela est la meilleure solution et si c'est sur à 100%. Ou bien m'indiquer s'il y a des procédures système pour effacer une colonne et toutes ses dépendances d'un seul coup ?
Merci
Partager