Nous savons tous que pour sélectionner toutes les colonnes d'une table, nous pouvons utiliser
SELECT * FROM tableA
Existe-t-il un moyen d'exclure des colonnes d'une table sans spécifier toutes les colonnes?
SELECT * [except columnA] FROM tableA
La seule façon que je sache est de spécifier manuellement toutes les colonnes et d'exclure la colonne indésirable. Cela prend vraiment beaucoup de temps, donc je cherche des moyens d'économiser du temps et des efforts à ce sujet, ainsi qu'une maintenance future si la table a plus / moins de colonnes.
sql
sql-server
tsql
pb2q
la source
la source
SELECT *
requête (OLE DB a des problèmes pour les mapper). 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 char à largeur fixe ...SELECT DISTINCT *
exception de la colonne clé pour fonctionner sans lignes en double que quelqu'un d'autre a crééesRéponses:
Je suis d'accord avec tout le monde ... mais si j'allais faire quelque chose comme ça, je pourrais le faire de cette façon:
la source
SELECT table1.ID AS table1ID ...
, IIRC.Non.
La meilleure pratique en matière de maintenance est de ne spécifier que les colonnes requises.
Au moins 2 raisons:
Edit (juillet 2011):
Si vous faites glisser depuis l'Explorateur d'objets le
Columns
nœud d'une table, il place pour vous une liste CSV de colonnes dans la fenêtre de requête qui atteint l'un de vos objectifsla source
Si vous ne voulez pas écrire manuellement le nom de chaque colonne, vous pouvez utiliser
Script Table As
en cliquant avec le bouton droit sur la table ou afficher dans SSMS comme ceci:Ensuite, vous obtiendrez toute la requête de sélection dans la nouvelle fenêtre de l'éditeur de requête, puis supprimez la colonne indésirable comme ceci:
Terminé
la source
La façon automatisée de le faire dans SQL (SQL Server) est:
la source
row_number()
à chaque ligne, puis effectuer une jointure parrow_number
, puis tout sélectionner à l' exceptionrow_number
de du résultat du jointure.Vous pouvez créer une vue qui a les colonnes que vous souhaitez sélectionner, puis vous pouvez simplement à
select *
partir de la vue ...la source
Oui c'est possible (mais non recommandé).
Explication du code :
SELECT @variable = @variable + ... FROM
pour concaténer les noms de colonne. Ce type deSELECT
ne renvoie pas de jeu de résultats. Il s'agit peut-être d'un comportement non documenté, mais qui fonctionne dans toutes les versions de SQL Server. Comme alternative, vous pouvez utiliserSET @variable = (SELECT ... FOR XML PATH(''))
pour concaténer des chaînes.ISNULL
fonction pour ajouter une virgule uniquement si ce n'est pas le nom de la première colonne. Utilisez laQUOTENAME
fonction pour prendre en charge les espaces et la ponctuation dans les noms de colonne.WHERE
clause pour masquer les colonnes que nous ne voulons pas voir.EXEC (@variable)
, également appelé SQL dynamique , pour résoudre les noms de colonne lors de l'exécution. Cela est nécessaire car nous ne connaissons pas les noms des colonnes au moment de la compilation.la source
SELECT @columns FROM contact
Comme les autres l'ont dit, il n'y a aucun moyen de le faire, mais si vous utilisez Sql Server, une astuce que j'utilise est de changer la sortie en virgule séparée, alors faites
et couper toute la liste des colonnes de la fenêtre de sortie. Ensuite, vous pouvez choisir les colonnes que vous souhaitez sans avoir à les saisir toutes.
la source
Fondamentalement, vous ne pouvez pas faire ce que vous souhaitez - mais vous pouvez obtenir les bons outils pour vous aider à rendre les choses un peu plus faciles.
Si vous regardez l' invite SQL de Red-Gate , vous pouvez taper "SELECT * FROM MyTable", puis déplacer le curseur en arrière après le "*", et appuyer sur <TAB> pour développer la liste des champs et supprimer ces quelques champs que vous pas besoin.
Ce n'est pas une solution parfaite - mais une sacrément bonne! :-) Dommage que Intellisense de MS SQL Server Management Studio ne soit toujours pas assez intelligent pour offrir cette fonctionnalité .......
Marc
la source
non, il n'y a aucun moyen de le faire. vous pouvez peut-être créer des vues personnalisées si cela est possible dans votre situation
EDIT Peut-être si votre base de données prend en charge l'exécution de sql dynamique u pourrait écrire un SP et passer les colonnes que vous ne voulez pas voir et le laisser créer la requête dynamiquement et vous renvoyer le résultat. Je pense que c'est faisable dans SQL Server atleast
la source
Si vous utilisez SQL Server Management Studio, procédez comme suit:
Prendre plaisir.
la source
Dans SQL Management Studio, vous pouvez développer les colonnes dans l'Explorateur d'objets, puis faire glisser l'
Columns
élément d'arborescence dans une fenêtre de requête pour obtenir une liste de colonnes séparées par des virgules.la source
En résumé, vous ne pouvez pas le faire, mais je ne suis pas d'accord avec tous les commentaires ci-dessus, il existe des scénarios dans lesquels vous pouvez légitimement utiliser un * Lorsque vous créez une requête imbriquée afin de sélectionner une plage spécifique dans une liste entière (telle que paging) pourquoi diable voudrait spécifier chaque colonne sur l'instruction select externe quand vous l'avez fait dans l'interne?
la source
MISE À JOUR:
Vous pouvez également créer une procédure stockée pour effectuer cette tâche si vous l'utilisez plus souvent. Dans cet exemple, j'ai utilisé le STRING_SPLIT () intégré qui est disponible sur SQL Server 2016+, mais si vous en avez besoin, il existe de nombreux exemples de la façon de le créer manuellement sur SO.
Et puis juste:
la source
Si nous parlons de procédures, cela fonctionne avec cette astuce pour générer une nouvelle requête et EXÉCUTER IMMÉDIATEMENT :
la source
Utiliser SQL déclaratif de la manière habituelle, non.
Je pense que la syntaxe que vous proposez est digne et bonne. En fait, le langage de base de données relationnelle «Tutorial D» a une syntaxe très similaire où les mots
ALL BUT
- clés sont suivis d'un ensemble d'attributs (colonnes).Cependant, SQL
SELECT *
reçoit déjà beaucoup de critiques (la réponse de @ Guffa ici est une objection typique), donc je ne pense pas que j'entreraiSELECT ALL BUT
bientôt dans la norme SQL.Je pense que le meilleur «contourner» est de créer un
VIEW
avec uniquement les colonnes que vous désirez alorsSELECT * FROM ThatView
.la source
select *
c'est discutable - très utile pour les trucs et programmes ad hoc qui ont besoin de gérer de manière générique les tableaux de données, mais pas tant pour la construction (en l'absence d'un meilleur mot) requêtes «pures». Pourtant, ne pas être dans la norme ANSI ne signifie pas que Microsoft ne peut pas l'ajouter à leur dialecte, comme pour beaucoup d'autres choses, mais je suis sceptique quant à leur choix.Un dialecte SQL moderne comme BigQuery propose une excellente solution
Il s'agit d'une syntaxe SQL très puissante pour éviter une longue liste de colonnes qui doivent être mises à jour tout le temps en raison des changements de nom de colonne de table. Et cette fonctionnalité manque dans l'implémentation actuelle de SQL Server, ce qui est dommage. Espérons qu'un jour, Microsoft Azure sera plus convivial pour les scientifiques des données.
Les scientifiques des données aiment pouvoir avoir une option rapide pour raccourcir une requête et pouvoir supprimer certaines colonnes (en raison de la duplication ou pour toute autre raison).
https://cloud.google.com/bigquery/docs/reference/standard-sql/query-syntax#select-modifiers
la source
Postgres sql a un moyen de le faire
les pls se réfèrent: http://www.postgresonline.com/journal/archives/41-How-to-SELECT-ALL-EXCEPT-some-columns-in-a-table.html
Le schéma d'information Hack Way
Ce qui précède pour mon exemple de tableau particulier - génère une instruction sql qui ressemble à ceci
SELECT o.officepark, o.owner, o.squarefootage FROM officepark As o
la source
Je ne connais aucune base de données qui supporte cela (SQL Server, MySQL, Oracle, PostgreSQL). Il ne fait définitivement pas partie des normes SQL, donc je pense que vous devez spécifier uniquement les colonnes que vous souhaitez.
Vous pouvez bien sûr créer dynamiquement votre instruction SQL et demander au serveur de l'exécuter. Mais cela ouvre la possibilité d'une injection SQL ..
la source
Je sais que c'est un peu vieux, mais je venais de rencontrer le même problème et je cherchais une réponse. Ensuite, 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 développez la table dans laquelle vous sélectionnez afin de voir le dossier des colonnes.
Dans votre instruction select, sélectionnez simplement le dossier des colonnes référencées ci-dessus et faites-le glisser dans la fenêtre de requête. Il collera toutes les colonnes du tableau, puis supprimera simplement la colonne d'identité de la liste des colonnes ...
la source
SELECT * Except(tableName.ColumnName) FROM ...
La meilleure façon de résoudre ce problème est d'utiliser la vue, vous pouvez créer une vue avec les colonnes requises et récupérer les données sous forme
la source
Si vous souhaitez exclure une colonne de cas sensible comme le mot de passe par exemple, je fais cela pour masquer la valeur:
SELECT * , "" as password FROM tableName;
la source
Eh bien, il est recommandé de spécifier les colonnes que vous souhaitez au lieu de simplement spécifier *. Vous devez donc simplement indiquer les champs que vous souhaitez que votre sélection renvoie.
la source
Un collègue a conseillé une bonne alternative:
Terminé...
Cela nous a beaucoup aidés.
la source
Cliquez avec le bouton droit sur la table dans l'Explorateur d'objets, sélectionnez les 1000 premières lignes
Il listera toutes les colonnes et non *. Supprimez ensuite la ou les colonnes indésirables. 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, obtenez l'invite SQL de Red Gate et tapez ssf à partir de tbl, accédez à * et cliquez à nouveau sur l'onglet.
la source
C'est ce que j'utilise souvent pour ce cas:
@colnames
ressemble àcolumn1,column2,column5
la source
Parfois, le même programme doit gérer différentes structures de base de données. Je n'ai donc pas pu utiliser une liste de colonnes dans le programme pour éviter les erreurs dans les
select
instructions.*
me donne tous les champs facultatifs. Je vérifie si les champs existent dans la table de données avant utilisation. Ceci est ma raison d'utiliser*
enselect
.Voici comment je gère les champs exclus:
la source
Je sais que cette question est ancienne, mais j'espère que cela peut toujours être utile.La réponse est inspirée d'une discussion sur les forums SQL Server . Vous pouvez en faire une procédure stockée . Il peut également être modifié pour ajouter plusieurs champs à l'exception de.
la source
Ne serait-ce pas plus simple de faire ça:
-Cliquez sur la colonne 'Column_name'> 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 en tapant que tout code proposé ici et toujours gérable.
la source
Vous pouvez obtenir SQL Complete sur devart.com, qui étend non seulement 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 un sélecteur de colonne déroulant avec des cases à cocher dans lesquelles vous pouvez cocher toutes les colonnes que vous souhaitez 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).
la source
Dans SSMS, il existe un moyen plus simple avec IntelliSense et l' alias . Essaye ça
la source