49 votes

Comment ajouter une colonne en TSQL après une colonne spécifique ?

J'ai une table :

MyTable
    ID
    FieldA
    FieldB

Je veux modifier le tableau et ajouter une colonne pour qu'il ressemble à ceci :

MyTable
    ID
    NewField
    FieldA
    FieldB

Dans MySQL, j'aurais donc un :

ALTER TABLE MyTable ADD COLUMN NewField int NULL AFTER ID;

Une seule ligne, agréable, simple, qui fonctionne très bien. Comment faire dans le monde de Microsoft ?

43voto

Mike M. Points 5408

Malheureusement, vous ne pouvez pas.

Si vous les voulez vraiment dans cet ordre, vous devrez créer une nouvelle table avec les colonnes dans cet ordre et copier les données. Ou renommer les colonnes, etc. Il n'y a pas de méthode simple.

14voto

Milan Points 746

Solution :

Cela fonctionnera pour les tables où il n'y a pas de dépendances sur la table en cours de modification qui déclencheraient des événements en cascade. Assurez-vous d'abord que vous pouvez abandonner la table que vous souhaitez restructurer sans que cela ait des répercussions désastreuses. Prenez note de toutes les dépendances et contraintes de colonnes associées à votre table (c'est-à-dire les déclencheurs, les index, etc.). Vous devrez peut-être les remettre en place lorsque vous aurez terminé.

ÉTAPE 1 : créez la table temporaire pour contenir tous les enregistrements de la table que vous voulez restructurer. N'oubliez pas d'inclure le fichier nouvelle colonne .

CREATE TABLE #tmp_myTable
(   [new_column] [int] NOT NULL, <-- new column has been inserted here!
    [idx] [bigint] NOT NULL,
    [name] [nvarchar](30) NOT NULL,
    [active] [bit] NOT NULL
)

ÉTAPE 2 : Assurez-vous que tous les enregistrements ont été copiés et que la structure des colonnes correspond à ce que vous souhaitez.

SELECT TOP 10 * FROM #tmp_myTable ORDER BY 1 DESC -- Vous pouvez faire COUNT(*) ou n'importe quoi pour vous assurer que vous avez copié tous les enregistrements.

ÉTAPE 3 : DROP la table originale :

DROP TABLE myTable

Si vous êtes paranoïaque et craignez que de mauvaises choses ne se produisent, renommez simplement la table d'origine (au lieu de la supprimer). De cette façon, vous pourrez toujours la récupérer.

EXEC sp_rename myTable, myTable_Copy

ÉTAPE 4 : Recréez la table myTable comme vous le souhaitez (elle doit correspondre à l'élément #tmp_myTable structure du tableau)

CREATE TABLE myTable
(   [new_column] [int] NOT NULL,
    [idx] [bigint] NOT NULL,
    [name] [nvarchar](30) NOT NULL,
    [active] [bit] NOT NULL
)

-- n'oubliez pas les contraintes dont vous pourriez avoir besoin

ÉTAPE 5 : Copier tous les enregistrements de la temp #tmp_myTable dans le nouveau tableau (amélioré) maTable .

INSERT INTO myTable ([new_column],[idx],[name],[active])
SELECT [new_column],[idx],[name],[active]
FROM #tmp_myTable

ÉTAPE 6 : Vérifiez si toutes les données sont de retour dans votre nouveau tableau amélioré. maTable . Si oui, nettoyez après vous et supprimez la table temporaire. #tmp_myTable et le maTable_Copy si vous avez choisi de le renommer au lieu de le laisser tomber.

4voto

Abe Miessler Points 34869

Vous devriez pouvoir le faire si vous créez la colonne en utilisant l'interface graphique de Management Studio. Je crois que Management Studio recrée complètement la table, ce qui explique pourquoi cela semble se produire.

Comme d'autres l'ont mentionné, l'ordre des colonnes dans un tableau n'a pas d'importance, et si c'est le cas, il y a quelque chose qui ne va pas dans votre code.

2voto

user2124444 Points 21

Dans SQL Enterprise Management Studio, ouvrez votre table, ajoutez la colonne où vous le souhaitez, puis -- au lieu d'enregistrer la modification -- générez la modification script. Vous pouvez voir comment cela se passe en SQL.

En bref, ce que les autres ont dit est juste. SQL Management Studio place toutes vos données dans une table temporaire, supprime la table, la recrée avec les colonnes dans le bon ordre, et y replace les données de la table temporaire. Il n'existe pas de syntaxe simple pour ajouter une colonne dans une position spécifique.

2voto

Glyn Points 21

/* script pour changer l'ordre des colonnes d'un tableau
Notez que cela va créer une nouvelle table pour remplacer la table originale.
CEPENDANT, il ne copie pas les triggers ou autres propriétés de la table - seulement les données.
*/

Générez un nouveau tableau avec les colonnes dans l'ordre que vous souhaitez.

Select Column2, Column1, Column3 Into NewTable from OldTable

Supprimer le tableau original

Drop Table OldTable;

Renommez la nouvelle table

EXEC sp_rename 'NewTable', 'OldTable';

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