Puis-je réorganiser les colonnes d'une table de manière logique?

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

Je ne veux pas jouer avec la disposition physique des colonnes sur le disque, mais j'aimerais regrouper les colonnes de manière logique lorsque c'est possible afin que des outils comme SQL Server Management Studio listent le contenu de la table de manière pratique.

Je sais que je peux le faire via SQL Management Studio en allant dans leur mode "design" pour les tables et en faisant glisser l'ordre des colonnes, mais je voudrais pouvoir le faire en SQL brut pour pouvoir effectuer la commande scripté à partir de la ligne de commande.

0
ajouté l'auteur Tim Abell, source
et une autre question connexe, à savoir si cela compte stackoverflow.com/questions/6692021/…
ajouté l'auteur Tim Abell, source
microsoft connect: syntaxe ALTER TABLE pour changer l'ordre des colonnes - la réponse est du chocolat -titre de variété comme d'habitude WONTFIX
ajouté l'auteur Tim Abell, source
Trop tard pour une réponse mais jetez un oeil à ce lien. blog.sqlauthority.com/2013/03/11/…
ajouté l'auteur sqluser, source

8 Réponses

Lorsque Management Studio le fait, il crée une table temporaire, en copiant tout ce qui se trouve à l'intérieur, en supprimant votre table d'origine et en renommant la table temporaire. Il n'y a pas d'instruction T-SQL équivalente simple.

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

Edit: battu!

0
ajouté

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

Ce que fait Enterprise Manager lorsque vous effectuez une réorganisation consiste à créer une nouvelle table, à déplacer les données, puis à supprimer l'ancienne table et à renommer la nouvelle table en nom existant.

Si vous voulez que vos colonnes soient dans un ordre / groupement particulier sans altérer leur ordre physique, vous pouvez créer une vue qui peut être ce que vous désirez.

0
ajouté

Si je comprends votre question, vous voulez affecter les colonnes retournées en premier, deuxième, troisième, etc. dans les requêtes existantes , n'est-ce pas?

Si toutes vos requêtes sont écrites avec SELECT * FROM TABLE , elles apparaîtront dans la sortie comme elles sont dans SQL.

Si vos requêtes sont écrites avec SELECT Champ1, Champ2 FROM TABLE - alors l'ordre dans lequel elles sont disposées dans SQL n'a pas d'importance.

0
ajouté

Il n'est pas possible de changer l'ordre des colonnes sans recréer toute la table. Si vous avez seulement quelques instances de la base de données, vous pouvez utiliser SSMS pour cela (Sélectionnez la table et cliquez sur "design").

In case you have too many instances for a manual process, you should try this script: https://github.com/Epaminaidos/reorder-columns

0
ajouté

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 les deux

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

0
ajouté

Je pense que ce qui manque à tout le monde, c'est que tout le monde n'a pas à traiter avec des instances de 10, 20 ou 1000 du même système installé dans le pays et dans le monde ... ceux d'entre nous qui conçoivent des logiciels vendus dans le commerce. Par conséquent, nous étendons les systèmes au fil du temps, développons des tables en ajoutant des champs car de nouvelles fonctionnalités sont nécessaires et, comme ces champs sont identifiés, ils appartiennent à une table existante. aux tables .... et puis devoir travailler avec ces tables de conception, soutenir, creuser parfois dans des données brutes / dépannage pour déboguer de nouveaux bogues de fonctionnalité .... il est incroyablement aggravant de ne pas avoir l'information primaire que vous voulez 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 dans une base de données strictement normalisée.

J'ai souvent souhaité pouvoir le faire, pour cette raison précise. Mais à court de faire exactement ce que SQL fait, Construire un script de création pour une nouvelle table comme je le veux, en y insérant l'insertion, puis en supprimant toutes les contraintes existantes, relations, clés, index, etc etc de la table existante et renommer la "nouvelle" table revient à l'ancien nom, puis en lisant toutes ces clés, relations, index, etc etc ....

Est non seulement fastidieux, prend du temps mais ... dans cinq ans, il faudra que ça se reproduise ...

Il est tellement proche de la valeur de cette énorme quantité de travail, mais le point est ... ce ne sera pas la dernière fois que nous avons besoin de cette capacité, car nos systèmes continueront à croître, à se développer et à obtenir des champs dans un wacked commandé par besoin / ajouts de conception.

Une majorité de développeurs pensent d'un point de vue système unique qui dessert une seule entreprise ou un marché spécifique très dur.

Les concepteurs et les leaders du développement sur étagère mais significativement progressifs dans leur espace de marché devront toujours faire face à ce problème, encore et encore ..... aimerait une solution créative si quelqu'un en a un. Cela pourrait facilement sauver mon entreprise une douzaine d'heures par semaine, ne pas avoir à faire défiler, ou se souvenir où "ce" champ est dans la table de données source ....

0
ajouté
Nous avons eu le même problème et créé une procédure stockée qui automatise ce processus (renommer, créer une nouvelle table, copier, recréer toutes les clés étrangères, contraintes, etc.). Vous avez seulement besoin de passer le nom de table et le nouvel ordre des colonnes. Si cela peut effectivement sauver votre entreprise des dizaines d'heures par semaine, vous devriez investir le temps d'écrire un script similaire. Pour nous, il a fallu environ 2-3 jours pour avoir un script stable que nous utilisons régulièrement pour réorganiser les colonnes. Il prend en charge toutes les fonctionnalités
ajouté l'auteur Andreas, source

Il y a un moyen, mais c'est seulement temporairement pour la requête elle-même. Par exemple,

Lets say you have 5 tables. Table is called T_Testing

Prénom, Nom, Numéro de téléphone, Email et Member_ID

vous voulez qu'il lise son identifiant, puis son nom, puis Prénom, puis Téléphone puis Email.

Vous pouvez le faire selon le Select.

Select Member_ID, LastName, FirstName, PhoneNumber, Email
From T_Testing

Autre que cela, si vous voulez juste que le nom de famille à montrer avant le prénom pour une raison quelconque, vous pouvez le faire aussi comme suit:

Select LastName, *
From T_Testing

La seule chose que vous voulez être sûr que vous faites est que OrderBy ou Where Function doit être dénommé Table.Column si vous allez utiliser un Where or OrderBy

Exemple:

Select LastName, *
From T_Testing
Order By T_Testing.LastName Desc

J'espère que cela aide, j'ai compris parce que j'avais besoin de le faire moi-même.

0
ajouté
Dans cette requête Sélectionnez Nom, * De T_Testing, vous obtenez deux fois le nom de famille.
ajouté l'auteur sqluser, source
  1. Script votre table existante vers une fenêtre de requête.
  2. Exécutez ce script sur une base de données de test (supprimez l'instruction Use)
  3. Utilisez SSMS pour apporter les changements de colonne dont vous avez besoin
  4. Cliquez sur Générer le script de modification (l'icône la plus à gauche et la plus basse sur le barre de boutons, par défaut)
  5. Utilisez ce script sur votre vraie table

Tout ce que fait vraiment le script est de créer une deuxième table de table avec les ordres de colonnes désirés, de copier toutes vos données dans celle-ci, de supprimer la table d'origine puis de renommer la table secondaire pour prendre sa place. Cela vous évite de l'écrire vous même si vous voulez un script de déploiement.

0
ajouté