sql server - Puis-je réorganiser logiquement les colonnes d'une table?

Translate

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 gâcher la disposition physique des colonnes sur le disque, mais je voudrais regrouper les colonnes de manière logique 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 entrant 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.

This question and all comments follow the "Attribution Required."

Toutes les réponses

Translate

Vous ne pouvez pas effectuer cette opération par programme (de manière sûre) sans créer une nouvelle table.

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

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

La source
Translate

Je pense que ce que tout le monde manque ici, c'est que même si tout le monde n'a pas à gérer des instances de 10, 20 ou 1000 du même système logiciel installé 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 étendons les systèmes au fil du temps, développons les tables en ajoutant des champs au fur et à 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 tels, plus d'une décennie d'expansion, de croissance, d'ajout de champs, etc. aux tables .... et ensuite avoir à travailler avec ces tables de la conception à la prise en charge, en passant parfois par les données brutes / le dépannage pour déboguer de nouveaux bogues de fonctionnalité .... il est incroyablement aggravant de ne pas avoir les informations principales 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 dans une base de données strictement normalisée.

J'ai souvent souhaité pouvoir le faire, pour cette raison exacte. Mais à moins 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., etc., de la table existante et renommer la "nouvelle" table de retour à l'ancien nom, puis la lecture de toutes ces clés, relations, index, etc etc ....

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

Cela vaut tellement la peine que cette quantité de travail énorme, 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 délirant conduit par besoins / ajouts de conception.

Une majorité de développeurs pensent d'un seul point de vue de système qui sert une seule entreprise ou un marché très spécifique de la boîte rigide.

Les concepteurs et les chefs de file du développement «standard» mais significativement progressifs dans leur espace 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 à faire défiler ou à se souvenir où "ce" champ se trouve dans la table de données source ...

La source
Translate

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

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

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

La source
Translate

Lorsque Management Studio le fait, il crée une table temporaire, copie tout le contenu, supprime votre table d'origine et renomme 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!

La source
Translate

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. La table s'appelleT_Testing

FirstName, LastName, PhoneNumber, Email et Member_ID

vous voulez qu'il répertorie leur identifiant, puis leur nom, puis leur prénom, leur téléphone et leur adresse e-mail.

Vous pouvez le faire selon le Select.

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

En dehors de cela, si vous voulez simplement que le nom de famille s'affiche avant le prénom pour une raison quelconque, vous pouvez le faire également 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 allez 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.

La source
Translate
  1. Script 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 (icône la plus à gauche et la plus basse de la barre de boutons, par défaut)
  5. Utilisez ce script contre votre vraie table

Le script ne fait vraiment que créer une deuxième table de table avec les ordres de colonnes souhaités, y copie toutes vos données, supprime la table d'origine, puis renomme la table secondaire pour la remplacer. Cela vous évite de l'écrire vous-même si vous souhaitez un script de déploiement.

La source
Translate

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, sauf si c'est absolument nécessaire.

La source
Translate

Il n'est pas possible de modifier l'ordre des colonnes sans recréer la table entière. Si vous ne disposez que de quelques instances de la base de données, vous pouvez utiliser SSMS pour cela (sélectionnez la table et cliquez sur «concevoir»).

Au cas où vous auriez trop d'instances pour un processus manuel, vous devriez essayer ce script:https://github.com/Epaminaidos/reorder-columns

La source