OVH Cloud OVH Cloud

Suppression d'un colonne par requête

1 réponse
Avatar
Michaël
Bonjour,

(Ce message fait suite =E0 un pr=E9c=E9dent auquel j'ai eu des=20
r=E9ponses mais qui n'ont pas solutionn=E9es mon probl=E8me)

Je souhaite donc toujours supprimer une colonne d'une de=20
mes tables. Mais voil=E0 lorsque j'ex=E9cute la commande en=20
VB :

=3D> MaBase.Execute "ALTER TABLE TempsPasse DROP COLUMN=20
NbsHeures"

J'ai le message suivant qui appara=EEt :

=3D> [Microsoft][ODBC SQL Server Driver][SQL Server]Le
objet 'DF__TempsPass__NbsHe__00200768' d=E9pend du
colonne 'NbsHeures'.

On m'a alors conseill=E9 de supprimer la contrainte valeur=20
d=E9faut avec la commande :

=3D> ALTER TABLE table DROP constraint LeNom

Mais j'ai cr=E9=E9 mon champ gr=E2ce =E0 la commande :

=3D> NbsHeures INTEGER DEFAULT 0

Je n'ai donc pas d=E9finit explicitement de nom pour ma=20
contrainte d'o=F9 ma difficult=E9 pour la supprimer. J'ai=20
bien le nom de la contrainte dans le message d'erreur, et=20
je pourrais le traiter en VB pour r=E9cup=E9rer le nom de la=20
contrainte (et dans ce cas pas de probl=E8me pour supprimer=20
ma contrainte puis mon champ), mais n'y a-t-il rien de=20
plus simple en SQL ?

D'avance merci.

Cordialement,

Micha=EBl

1 réponse

Avatar
Nicolas LETULLIER
En utilisant alors les vues INFORMATION_SCHEMA, avec une procédure stockée
dans le genre de celle-ci :

CREATE PROCEDURE usp_dropcolumn @table_name sysname, @column_name sysname
AS
DECLARE @constraint_name sysname
DECLARE @commande varchar(1000)
SELECT @constraint_name = CONSTRAINT_NAME
FROM INFORMATION_SCHEMA.CONSTRAINT_COLUMN_USAGE
WHERE TABLE_NAME = @table_name AND COLUMN_NAME = @column_name

SET @commande = 'ALTER TABLE ' + @table_name + ' DROP CONSTRAINT ' +
@constraint_name
EXEC(@commande)
SET @commande = 'ALTER TABLE ' + @table_name + ' DROP COLUMN ' +
@column_name
EXEC(@commande)

Celle-ci marche si la colonne n'a qu'une seule contrainte attachée, sinon il
te faudra utiliser un curseur pour supprimer toutes les contraintes.

Nicolas



"Michaël" a écrit dans le message de
news:08f501c39ecd$56202f60$
Bonjour,

(Ce message fait suite à un précédent auquel j'ai eu des
réponses mais qui n'ont pas solutionnées mon problème)

Je souhaite donc toujours supprimer une colonne d'une de
mes tables. Mais voilà lorsque j'exécute la commande en
VB :

=> MaBase.Execute "ALTER TABLE TempsPasse DROP COLUMN
NbsHeures"

J'ai le message suivant qui apparaît :

=> [Microsoft][ODBC SQL Server Driver][SQL Server]Le
objet 'DF__TempsPass__NbsHe__00200768' dépend du
colonne 'NbsHeures'.

On m'a alors conseillé de supprimer la contrainte valeur
défaut avec la commande :

=> ALTER TABLE table DROP constraint LeNom

Mais j'ai créé mon champ grâce à la commande :

=> NbsHeures INTEGER DEFAULT 0

Je n'ai donc pas définit explicitement de nom pour ma
contrainte d'où ma difficulté pour la supprimer. J'ai
bien le nom de la contrainte dans le message d'erreur, et
je pourrais le traiter en VB pour récupérer le nom de la
contrainte (et dans ce cas pas de problème pour supprimer
ma contrainte puis mon champ), mais n'y a-t-il rien de
plus simple en SQL ?

D'avance merci.

Cordialement,

Michaël