6 votes

Changer l'ordre des colonnes / ajouter une nouvelle colonne pour une table existante dans SQL Server 2008

J'ai une situation où je dois changer l'ordre des colonnes/ajouter de nouvelles colonnes pour une Table existante dans SQL Server 2008. Il ne me permet pas de le faire sans supprimer et recréer. Mais c'est dans un système de production et il y a des données dans cette table. Je peux sauvegarder les données, supprimer la table existante et changer l'ordre/ajouter de nouvelles colonnes et la recréer, insérer les données sauvegardées dans la nouvelle table.

Y a-t-il un meilleur moyen de faire cela sans supprimer et recréer. Je pense que SQL Server 2005 permettra ce processus sans supprimer et recréer tout en changeant la structure de la table existante.

Merci

9voto

marc_s Points 321990

Vous ne pouvez pas vraiment changer l'ordre des colonnes dans une table SQL Server 2008 - cela n'a pas vraiment d'importance (du moins, cela ne devrait pas l'être, dans le modèle relationnel).

Avec le concepteur visuel dans SQL Server Management Studio, dès que vous apportez trop de modifications, la seule façon fiable de le faire pour SSMS est de recréer la table dans le nouveau format, copier les données, puis supprimer l'ancienne table. Il n'y a vraiment rien que vous puissiez faire pour changer cela.

Ce que vous pouvez faire à tout moment, c'est ajouter de nouvelles colonnes à une table ou supprimer des colonnes existantes à l'aide de déclarations SQL DDL :

ALTER TABLE dbo.VotreTable
    ADD NouvelleColonne INT NOT NULL ........

ALTER TABLE dbo.VotreTable
    DROP COLUMN AncienneColonne

Cela fonctionnera, mais vous ne pourrez pas influencer l'ordre des colonnes. Mais encore une fois : pour vos opérations normales, l'ordre des colonnes dans une table est totalement sans importance - c'est au mieux une question cosmétique sur vos impressions ou diagrammes.... pourquoi êtes-vous donc si fixé sur un ordre de colonnes spécifique ??

3voto

Anton Points 1645

Il existe un moyen de le faire en mettant à jour la table système SQL server :

1) Connectez-vous au serveur SQL en mode DAC

2) Exécutez des requêtes qui mettront à jour l'ordre des colonnes :

update syscolumns 
set colorder = 3
where name='column2'

Mais cette méthode n'est pas recommandée, car vous pourriez endommager quelque chose dans la base de données.

2voto

tvanfosson Points 268301

Une possibilité serait de ne pas vous soucier de réorganiser les colonnes dans le tableau et simplement le modifier en ajoutant les colonnes. Ensuite, créez une vue qui a les colonnes dans l'ordre souhaité - en supposant que l'ordre soit vraiment important. La vue peut être facilement modifiée pour refléter tout ordonnancement souhaité. Comme je ne peux pas imaginer que l'ordre serait important pour les applications programmatiques, la vue devrait suffire pour ces requêtes manuelles où cela pourrait être important.

1voto

Cade Roux Points 53870

Comme l'ont dit les autres affiches, il n'y a pas de moyen de le faire sans réécrire la table (mais SSMS générera des scripts qui le feront pour vous).

Si vous êtes toujours en phase de conception / développement, je vous conseille vivement de rendre l'ordre des colonnes logique - rien de pire que d'ajouter une nouvelle colonne à une clé primaire multicolumn et de la retrouver nulle part près des autres colonnes ! Mais vous devrez recréer la table.

Une fois, j'ai utilisé un système tiers qui trie toujours ses colonnes par ordre alphabétique. C'était génial pour trouver des colonnes dans leur système, mais chaque fois qu'ils ont mis à jour leur logiciel, nos procédures et vues devenaient invalides. C'était dans une ancienne version de SQL Server, cependant. Je pense que depuis 2000, je n'ai pas vu beaucoup de problèmes avec l'ordre incorrect des colonnes. Lorsque Access avait l'habitude de se lier à des tables SQL, je crois que cela verrouillait les définitions de colonnes au moment de la liaison de table, ce qui pose évidemment des problèmes avec presque toutes les modifications de la définition de table.

1voto

Je pense que la manière la plus simple serait de recréer la table comme vous le souhaitez avec un nom différent, puis de copier les données de la table existante, de la supprimer et de renommer la nouvelle table.

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