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.
sql-server
appel rapide
la source
la source
Réponses:
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
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 concevons 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,
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 point de vue système unique qui sert une seule entreprise ou un marché très spécifique de la boîte rigide.
Les concepteurs et les leaders du développement «standard» mais significativement progressistes 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 la page ou à se souvenir où "ce" champ se trouve dans la table de données source ...
la source
FieldID Guid
,OrderBy int
. Terminé. Puis SSMS ouSELECT *
utilise ça. Désactivez-le si vous êtes un DBA parfait et que vous n'en voulez pas. Très frustrant. Et maintenant, mes tables sont assez grandes pour que je ne puisse plus les forcer brutalement.Si je comprends votre question, vous souhaitez affecter les colonnes renvoyé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
- alors elles apparaîtront dans la sortie telles qu'elles sont présentées dans SQL.Si vos requêtes sont écrites avec
SELECT Field1, Field2 FROM TABLE
- l'ordre dans lequel elles sont disposées en SQL n'a pas d'importance.la source
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
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'appelle
T_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.
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:
La seule chose que vous voulez être sûr de faire est que la fonction OrderBy ou Where doit être désignée comme Table.Column si vous allez utiliser un Where ou OrderBy
Exemple:
J'espère que cela aide, je l'ai compris parce que je devais le faire moi-même.
la source
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
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
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