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.

6voto

Ronald Wildenberg Points 18258

Je ne connais aucune base de données qui supporte cela (SQL Server, MySQL, Oracle, PostgreSQL). Cela ne fait absolument pas partie des normes SQL. Je pense donc que vous devez spécifier uniquement les colonnes que vous souhaitez.

Vous pouvez bien sûr créer votre instruction SQL de manière dynamique et demander au serveur de l'exécuter. Mais cela ouvre la possibilité d'une injection SQL

4voto

cairnz Points 3159

Cliquez avec le bouton droit de la souris sur le tableau dans l'Explorateur d'objets, sélectionnez les 1000 premières lignes.

Toutes les colonnes seront listées et pas les *. Ensuite, supprimez la ou les colonnes non désirées. Cela devrait être beaucoup plus rapide que de le taper vous-même.

Ensuite, lorsque vous sentez que c'est un peu trop de travail, prenez l'invite SQL de Red Gate, et tapez ssf from tbl, allez jusqu'au * et cliquez à nouveau sur la tabulation.

4voto

anonymous Points 1

Je sais que c'est un peu vieux, mais je viens de rencontrer le même problème et je cherchais une réponse. Puis un développeur senior m'a montré une astuce très simple.

Si vous utilisez l'éditeur de requêtes de Management Studio, développez la base de données, puis la table dans laquelle vous effectuez votre sélection afin de voir le dossier des colonnes.

dans votre instruction select, mettez simplement en surbrillance le dossier colonnes référencées ci-dessus et faites-le glisser dans la fenêtre de requête. Il passera toutes les colonnes de la table, puis supprimera simplement la colonne d'identité de la liste des colonnes...

3 votes

Oui, mais si vous avez 5 jointures, l'idée serait de faire SELECT * Except(tableName.ColumnName) FROM ...

0 votes

Je trouve cela utile :) Je n'étais pas au courant de cela, néanmoins ce n'est pas une réponse à la question du sujet.

3voto

SQL Heroes Points 544

Un collègue m'a conseillé une bonne alternative :

  • Faites SELECT INTO dans votre requête précédente (où vous générez ou obtenez les données) dans un tableau (que vous supprimerez une fois terminé). données) dans une table (que vous supprimerez lorsque vous aurez terminé). Cela va créer la structure pour vous.
  • Faire un script comme CREATE à la nouvelle requête fenêtre.
  • Supprimez les colonnes indésirables. Formatez les colonnes restantes en une ligne et collez-les comme votre liste de colonnes.
  • Supprimez la table que vous créé.

C'est fait...

Cela nous a beaucoup aidés.

2voto

Gustavo Points 263

Eh bien, la meilleure pratique consiste à spécifier les colonnes que vous voulez, au lieu de simplement spécifier *. Vous devez donc indiquer les champs que vous voulez que votre sélection renvoie.

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