Question

Si j'ajoute 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 modifier la disposition physique des colonnes sur le disque, mais j'aimerais regrouper logiquement les colonnes lorsque cela est possible afin que des outils tels que SQL Server Management Studio répertorient le contenu de la table de manière pratique.

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

Était-ce utile?

La solution

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

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

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

Autres conseils

Je pense que ce qui manque à tout le monde ici, c'est que même si tout le monde n'a pas à gérer des dizaines, des vingt ou des milliers d'instances du même système logiciel installées dans tout le pays et dans le monde...ceux d'entre nous qui conçoivent des logiciels vendus dans le commerce le font.En conséquence, nous développons les systèmes au fil du temps, élargissons les tables en ajoutant des champs à mesure que de nouvelles capacités sont nécessaires, et à mesure que ces champs sont identifiés, ils appartiennent à une table existante, et en tant que tel, sur une décennie d'expansion, de croissance, d'ajout de champs, etc. aux tables....et ensuite devoir travailler avec ces tables depuis la conception, jusqu'au support, jusqu'à parfois fouiller dans les données brutes/dépannage pour déboguer de nouveaux bogues de fonctionnalités...il est incroyablement agaçant de ne pas avoir les informations principales que vous souhaitez voir dans la première poignée de champs, alors que 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 faire cela, pour cette raison précise.Mais à défaut de faire exactement ce que fait SQL, créer un script de création pour une nouvelle table comme je le souhaite, y écrire l'insertion, puis supprimer toutes les contraintes, relations, clés, index, etc. existants de la table existante et renommer la "nouvelle" table revient à l'ancien nom, puis lit toutes ces clés, relations, index, etc etc....

Ce n'est pas seulement fastidieux, prend du temps, mais...dans cinq ans, cela devra se reproduire....

Cela vaut tellement cette énorme quantité de travail, mais le fait est que...ce ne sera pas la dernière fois que nous aurons besoin de cette capacité, car nos systèmes continueront de croître, de s'étendre et d'obtenir des champs dans un ordre fou en fonction des ajouts de besoins/de conception.

La majorité des développeurs pensent du point de vue d'un système unique qui sert une seule entreprise ou un marché de boîtiers rigides très spécifique.

Les concepteurs « prêts à l'emploi » mais significativement progressistes et les leaders du développement dans leur domaine de marché devront toujours faire face à ce problème, encore et encore... aimeraient une solution créative si quelqu'un en a une.Cela pourrait facilement faire gagner à mon entreprise une douzaine d'heures par semaine, sans avoir simplement à faire défiler la page ou à me rappeler où se trouve "ce" champ dans la table de données source....

Si je comprends votre question, vous souhaitez affecter les colonnes renvoyées en premier, deuxième, troisième, etc. existant des requêtes, non ?

Si toutes vos requêtes sont écrites avec SELECT * FROM TABLE - ils apparaîtront alors dans la sortie tels qu'ils sont présentés en SQL.

Si vos requêtes sont écrites avec SELECT Field1, Field2 FROM TABLE - alors l'ordre dans lequel ils sont présentés dans SQL n'a pas d'importance.

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

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

Modifier:battu!

Il existe un moyen, mais ce n'est que temporairement pour la requête elle-même.Par exemple,

Disons que vous avez 5 tables.Le tableau s'appelle T_Testing

Prénom, nom, numéro de téléphone, e-mail et ID_membre

vous souhaitez qu'il indique leur identifiant, puis leur nom de famille, puis leur prénom, puis leur téléphone et enfin leur e-mail.

Vous pouvez le faire selon la sélection.

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

En dehors de cela, si vous souhaitez simplement que le nom de famille s'affiche avant le prénom pour une raison quelconque, vous pouvez également le faire comme suit :

Select LastName, *
From T_Testing

La seule chose que vous voulez être sûr de faire est que la fonction OrderBy ou Where doit être désignée par Table.Column si vous comptez utiliser un Where ou OrderBy.

Exemple:

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

J'espère que cela aide, je l'ai compris parce que je devais le faire moi-même.

  1. Scriptez votre table existante dans 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 modifications de colonne dont vous avez besoin
  4. Cliquez sur Générer le script de modification (laisse le plus et l'icône Bottomost sur la barre de boutons, par défaut)
  5. Utilisez ce script sur votre vraie table

Tout ce que le script fait réellement, c'est créer une deuxième table avec l'ordre des colonnes souhaité, y copier toutes vos données, supprimer la table d'origine, puis renommer la table secondaire pour prendre sa place.Cela vous évite de l'écrire vous-même si vous souhaitez un script de déploiement.

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 les tables système, sauf si cela est absolument nécessaire.

Il n'est pas possible de modifier l'ordre des colonnes sans recréer l'intégralité du tableau.Si vous disposez uniquement de quelques instances de la base de données, vous pouvez utiliser SSMS pour cela (sélectionnez la table et cliquez sur "concevoir").

Si vous disposez de trop d'instances pour un processus manuel, vous devriez essayer ce script :https://github.com/Epaminaidos/reorder-columns

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top