2010-05-27 4 views
1

Possible en double:
SQL exclude a column using SELECT * [except columnA] FROM tableA?Possibilité d'exclure ou de réorganiser une colonne de `*`?

Est-il possible d'exclure une colonne d'une instruction select * from table avec SQL Server?

J'ai un besoin pour ceci et c'est ma seule option autre que l'analyse d'une chaîne SQL brute pour obtenir les noms de champs requis (je ne veux vraiment pas faire cela).

Juste pour être audacieux. Lorsque la requête est faite, je n'ai pas accès à la liste des champs nécessaires de la table mais je sais de quel champ je n'ai pas besoin. Cela fait partie d'une requête complexe en plusieurs parties.

Il doit sûrement y avoir un moyen, même si elle est « hackish », comme l'utilisation de variables de table ou vues

Mon autre option est de réorganiser les colonnes. Mon problème est avec ExecuteScalar fonctions SQL qui obtiennent la première ligne et la première colonne.

EDIT

Je ne peux pas ajouter une réponse car cela est maintenant fermée, mais la façon dont je fini par le faire était comme si:

;with results_cte as (
    select (calculation) as calculated_column, * from table 
) 
select * into #temptable from results_cte 
where calculated_column<10 /*or whatever*/ 

alter table #temptable 
    drop column calculated_column 

select * from #temptable 
drop table #temptable 
+0

Demande impaire ... – Blindy

Répondre

1

Non. Vous devrez construire votre déclaration manuellement ou simplement sélectionner *.

0

No.

Au lieu de cela, vous pouvez vérifier syscolumns pour obtenir tous les noms de champs, ou (peut-être) SELECT * et ignorer cette colonne.

+0

Voir mon édition pour pourquoi je ne peux pas l'ignorer. Fondamentalement, je reçois une requête et je la modifie afin qu'elle puisse être paginée par un offset et une limite. Mon problème est que je dois insérer une colonne au début de la requête juste après la sélection. Ce ne serait pas un problème, sauf pour ces requêtes utilisent ExecuteScalar qui obtient seulement la 1ère colonne de la 1ère ligne. – Earlz

0

Si vous utilisez SQL dynamique, vous pouvez générer la requête à partir de métadonnées sur la table ou la vue (INFORMATION_SCHEMA.COLUMNS) et exclure les colonnes de cette manière. Je le fais beaucoup pour générer des triggers ou des vues.

Mais il n'y a rien dans le langage SQL qui supporte cela.

0

La meilleure façon de gérer cela serait de select * et de ne pas présenter la colonne exclue à vos utilisateurs dans votre interface. Comme d'autres l'ont noté, SQL n'a pas de capacité directe de faire une construction de toutes les colonnes sauf.

+0

Je ne peux pas simplement "ignorer" la colonne parce que la colonne que je veux ignorer est la première colonne. La requête est utilisée par 'ExecuteScalar' qui saisit simplement la première colonne de la première ligne. – Earlz

Questions connexes