1143 votes

SQL exclure une colonne en utilisant SELECT * [sauf colonneA] de tableA ?

Nous savons tous que pour sélectionner toutes les colonnes d'un tableau, nous pouvons utiliser

SELECT * FROM tableA

Existe-t-il un moyen d'exclure une ou plusieurs colonnes d'un tableau sans spécifier toutes les colonnes ?

SELECT * [except columnA] FROM tableA

Le seul moyen que je connaisse est de spécifier manuellement toutes les colonnes et d'exclure la colonne indésirable. Cela prend beaucoup de temps et je cherche donc des moyens d'économiser du temps et des efforts sur ce point, ainsi que sur la maintenance future si la table a plus ou moins de colonnes.

Merci !

58 votes

Il serait très pratique de disposer de cette fonctionnalité, non pas pour la mettre dans le code de production, mais à des fins de dépannage. Exemple : J'ai une table qui a plusieurs colonnes que j'interroge, mais je veux rapidement omettre une ou deux colonnes de texte.

0 votes

J'en avais besoin lorsque je travaillais avec openquery (bien que j'aie besoin de la fonctionnalité dans MySQL plutôt que dans SQL Server). Je devais interroger une base de données MySQL à l'aide de SQL Server. Parce qu'une table MySQL avait des colonnes de caractères de largeur fixe, je ne pouvais pas utiliser une fonction SELECT * (OLE DB a du mal à les mettre en correspondance). Je n'ai pas pu spécifier les bonnes colonnes car je n'avais pas d'accès direct à la base de données MySQL, mais SQL Server a eu la gentillesse de m'informer des noms des colonnes de caractères à largeur fixe...

9 votes

J'aimerais ajouter une autre raison de le faire : SELECT DISTINCT * sauf pour la colonne clé qui doit fonctionner sans dupliquer les lignes que quelqu'un d'autre a créées.

0voto

plo Points 11

Ne serait-il pas plus simple de faire ça :

sp_help <table_name>

-Cliquez sur la colonne 'Nom_Colonne'> Copier> Coller (crée une liste verticale) dans une nouvelle fenêtre de requête et tapez simplement des virgules devant chaque valeur de colonne... commentez les colonnes que vous ne voulez pas... beaucoup moins de saisie que n'importe quel code proposé ici et encore gérable.

0 votes

"beaucoup moins de saisie que n'importe quel code proposé ici" et beaucoup plus de tracas que de faire glisser le nœud Colonnes dans l'éditeur de requêtes ou n'importe quel autre moyen supérieur d'obtenir la liste. Je veux dire qu'en ce qui concerne les tables avec plusieurs dizaines de colonnes ?

0voto

yo hal Points 1949

Vous pouvez obtenir SQL Complete de devart.com, qui non seulement développe le caractère générique * comme le fait SQL Prompt de Red Gate (comme décrit dans la réponse de cairnz), mais fournit également une liste déroulante de sélection de colonne avec des cases à cocher dans lesquelles vous pouvez cocher toutes les colonnes que vous voulez dans la liste de sélection et elles seront insérées automatiquement pour vous (et si vous décochez ensuite une colonne, elle sera automatiquement supprimée de la liste de sélection).

0voto

DuckWork Points 1

Dans SSMS, il existe une méthode plus simple avec IntelliSense et Aliasing . Essayez ceci

  1. Faites un clic droit dans l'éditeur de texte et assurez-vous que IntelliSense est activé.
  2. Tapez la requête avec un alias [SELECT t.* FROM tablename t].
  3. Allez le texte t.* et supprimer le * et SSMS établira une liste automatique des colonnes de la base de données. f table alias.

Vous pouvez alors spécifier rapidement seulement les colonnes que vous voulez sans avoir à utiliser SSMS pour écrire une sélection dans un autre script et ensuite faire plus d'opérations de copier/coller. J'utilise cela tout le temps.

0 votes

Pourriez-vous préciser votre réponse à la colonne exclusion, s'il vous plaît ?

0 votes

@Kamiccolo - ce qui est décrit par DuckWork est une action MANUELLE. Il s'agit de couper et de coller les noms des colonnes souhaitées. Il dit simplement que c'est un moyen d'obtenir plus facilement les noms, sans avoir à les taper. Cela ne vous aide pas à écrire une requête qui dit "exclure cette colonne". Il vous aide simplement à créer la liste des colonnes souhaitées, que vous collez ensuite dans votre requête.

-1voto

Guffa Points 308133

Non, il n'y a aucun moyen de le faire, et il n'y a aucune bonne raison de le faire.

Lorsque vous sélectionnez des données, vous ne devez jamais utiliser * vous devez toujours spécifier les champs que vous souhaitez. En effet, vous souhaitez que la requête fonctionne de la même manière, même si vous ajoutez ultérieurement un autre champ à la table. Vous devez également spécifier l'ordre des champs dans le résultat afin que le réarrangement des champs dans la table ne modifie pas le résultat.

Il en va bien sûr de même pour * except si c'était possible de le faire.

4 votes

Je pense que dans la plupart des cas, si vous utilisez *, vous voulez VRAIMENT retourner chaque colonne (même les nouvelles).

0 votes

@Rob : Ce n'est certainement pas quelque chose que je recommanderais dans un code de production. Il faudrait rendre l'application dynamique afin qu'elle puisse gérer les informations supplémentaires pour qu'il y ait un intérêt à les obtenir. Obtenir tous les champs pourrait facilement faire en sorte que la requête cesse de fonctionner si vous ajoutez des champs qui ne tiennent plus dans le tampon de la base de données.

2 votes

-1, parfois vous voulez vraiment toutes les colonnes. En particulier lorsqu'il s'agit de CTE et de sous-requêtes dans une même requête. Il est courant de sélectionner toutes les colonnes et c'est généralement le but recherché ; sélectionner toutes les colonnes à l'exception de ces colonnes serait très utile.

-1voto

Selon la taille de votre tableau, vous pouvez l'exporter dans Excel et le transposer pour obtenir un nouveau tableau dans lequel les colonnes du tableau original seront les lignes du nouveau tableau. Ensuite, reprenez-le dans votre base de données SQL, sélectionnez les lignes en fonction de la condition et insérez-les dans un autre nouveau tableau. Enfin, exportez cette nouvelle table vers Excel et effectuez une autre transposition pour obtenir la table souhaitée, puis reprenez-la dans votre base de données SQL.

Je ne suis pas sûr que la transposition puisse se faire dans une base de données SQL, si oui, ce sera encore plus facile.

Jeff

3 votes

1. Ce n'est pas ce qui est demandé. 2. C'est beaucoup plus de travail que d'utiliser SQL pour cloner la table et ajouter les colonnes souhaitées.

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