408 votes

Comment supprimer une colonne d'une table existante ?

Comment supprimer une colonne d'une table existante ?

J'ai une table MEN con Fname y Lname

Je dois retirer le Lname

Comment faire ?

692voto

jcomeau_ictx Points 15736
ALTER TABLE MEN DROP COLUMN Lname

168voto

reggie Points 4868

Générique :

ALTER TABLE table_name DROP COLUMN column_name;

Dans votre cas :

ALTER TABLE MEN DROP COLUMN Lname;

73voto

John Moore Points 641

Votre exemple est simple et ne nécessite pas de modifications supplémentaires des tables, mais de manière générale, ce n'est pas si trivial.

Si cette colonne est référencée par d'autres tables, vous devez déterminer ce qu'il faut faire avec les autres tables/colonnes. Une option consiste à supprimer les clés étrangères et à conserver les données référencées dans d'autres tables.

Une autre option consiste à rechercher toutes les colonnes de référence et à les supprimer également si elles ne sont plus nécessaires.

Dans ce cas, le véritable défi consiste à trouver toutes les clés étrangères. Vous pouvez le faire en interrogeant les tables du système ou en utilisant des outils tiers tels que Recherche ApexSQL (gratuit) ou Red Gate Suivi des dépendances (premium mais plus de fonctionnalités). Il y a un fil entier sur les clés étrangères aquí

49voto

Aron Ysidoro Points 922

C'est la bonne réponse :

ALTER TABLE MEN DROP COLUMN Lname

Mais... si un CONSTRAINT existe sur le COLUMN alors vous devez DROP le site CONSTRAINT d'abord, puis vous serez en mesure de DROP le site COLUMN . Afin de déposer un CONSTRAINT , cours :

ALTER TABLE MEN DROP CONSTRAINT {constraint_name_on_column_Lname}

7voto

Tad Points 11

La question est la suivante : peut-on seulement supprimer une colonne d'une table non existante ?)

BEGIN TRANSACTION

IF exists (SELECT * FROM  sys.columns c 
INNER JOIN  sys.objects t ON (c.[object_id] = t.[object_id])
WHERE t.[object_id] = OBJECT_ID(N'[dbo].[MyTable]')
AND c.[name] = 'ColumnName')
    BEGIN TRY
        ALTER TABLE [dbo].[MyTable] DROP COLUMN ColumnName
    END TRY
    BEGIN CATCH
        print 'FAILED!'
    END CATCH
ELSE
    BEGIN 
        SELECT ERROR_NUMBER() AS ErrorNumber;
        print 'NO TABLE OR COLUMN FOUND !'
    END 

COMMIT

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X