96 votes

Puis-je logiquement réorganiser les colonnes dans une table?

Si je suis l'ajout d'une colonne à une table dans Microsoft SQL Server, puis-je contrôler l'endroit où la colonne est affichée logiquement dans les requêtes?

Je ne veux pas gâcher la disposition physique des colonnes sur le disque, mais je voudrais logiquement groupe de colonnes lorsque possible, de sorte que des outils tels que SQL Server Management Studio liste le contenu de la table dans une manière très pratique.

Je sais que je peux le faire par le biais de SQL Management Studio en allant dans leur "design" de la mode pour les tables et en faisant glisser l'ordre des colonnes, mais je voudrais être capable de le faire en SQL brut afin que je puisse effectuer la commande de script en ligne de commande.

79voto

vzczc Points 4923

Vous ne pouvez pas le faire par programmation (de manière sûre) sans créer une nouvelle table.

Lorsque Enterprise Manager valide une nouvelle commande, Enterprise Manager crée une nouvelle table, déplace les données, puis supprime l'ancienne table et renomme la nouvelle table avec le nom existant.

Si vous souhaitez que vos colonnes soient dans un ordre / groupe particulier sans modifier leur ordre physique, vous pouvez créer une vue qui peut être celle que vous souhaitiez.

44voto

Philip Coyner Points 41

Je pense que ce que tout le monde ici est manquant, c'est que bien que le monde n'a pas à traiter avec les 10 s, 20 s, ou 1000 instances de la même logiciel système installé dans tout le pays et du monde ... ceux d'entre nous que la conception vendus dans le commerce logiciels de le faire. Comme un résultat, nous l'élargissement des systèmes au fil du temps, développez tables en ajoutant des champs comme nouvelle capacité est nécessaire, et que ces champs sont identifiés appartiennent à une table existante, et en tant que tel, plus d'une décennie d'expansion , de croissance, l'ajout de champs, etc à des tableaux .... et puis d'avoir à travailler avec les tables de la conception, de soutien, parfois de creuser dans les données brutes/dépannage pour déboguer les nouvelles fonctionnalités de bugs .... il est incroyablement aggravante pour ne pas avoir la primaire les informations que vous souhaitez voir dans la première poignée de champs, quand vous pouvez avoir des tables avec 30-40-50 ou même 90 champs et oui, strictement base de données normalisée.

J'ai souvent souhaité que je pouvais faire cela, pour cette raison exacte. Mais à court de faire exactement ce que le langage SQL, la Construction d'un Créer un Script pour une nouvelle Table de la façon dont je le veux, l'écriture de l'Insérer, puis la suppression de toutes les contraintes existantes, les relations, les clés, index, etc etc etc à partir de la table existante, et de le renommer la "nouvelle" table de revenir à l'ancien nom, et puis la lecture de tous ces clés, les relations, index, etc etc ....

N'est pas seulement fastidieux, chronophage mais ... dans cinq ans, ce qui devra arriver de nouveau ....

Il est si proche de la valeur que l'énorme quantité de travail, toutefois, le point est ... ce ne sera pas la dernière fois que nous avons besoin de cette capacité, car nos systèmes continuent de grandir, et d'obtenir les champs de la wacked commandé poussée par le besoin/la conception des ajouts.

Une majorité de développeurs pensent à partir d'un seul point de vue du système qui ne sert qu'à une société ou très dur spécifique de la boîte de marché.

Le "off-the-shelf", mais nettement progressive de designers et de chefs de développement dans leur espace de marché aurez toujours à faire face à ce problème, encore et encore.....aimerais une solution créative si quelqu'un a un. Cela pourrait facilement enregistrer mon entreprise une dizaine d'heures par semaine, juste pour ne pas avoir à faire défiler ou de se rappeler où "que" le terrain est à la source de données de la table....

5voto

Otto Points 1246

Si je comprends votre question, vous voulez affecter les colonnes qui sont retournées en premier, deuxième, troisième, etc. dans les requêtes existantes , non?

Si toutes vos requêtes sont écrites avec SELECT * FROM TABLE, elles apparaîtront dans la sortie telles qu'elles sont présentées en SQL. Si vos requêtes sont écrites avec SELECT Field1, Field2 FROM TABLE, l'ordre dans lequel elles sont présentées en SQL n'a pas d'importance.

4voto

tags2k Points 11036

Lorsque Management Studio le fait, il crée une table temporaire, copie tout, supprime la table d'origine et renomme la table temporaire. Il n'y a pas d'instruction T-SQL équivalente simple.

Si cela ne vous tente pas, vous pouvez toujours créer une vue de la table avec les colonnes dans l'ordre que vous souhaitez et l'utiliser?

Edit: battu!

0voto

Milan Babuškov Points 20423

Cela peut être fait en utilisant SQL, en modifiant directement les tables système. Par exemple, regardez ici:

Modifier la table - Ajouter une nouvelle colonne entre

Cependant, je ne recommanderais pas de jouer avec les tables système, à moins que ce ne soit absolument nécessaire.

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