7
votes

Trouver le nombre de colonnes renvoyées par une requête

Comment puis-je obtenir le nombre de colonnes renvoyées par une requête SQL à l'aide de SQL Server?

Par exemple, si j'ai une requête comme suit: xxx

Il doit renvoyer le nombre total de colonnes dans le tableau A1 + Nombre total de colonnes dans le tableau A2. Mais la requête pourrait être plus compliquée.


7 commentaires

Par curiosité, pourquoi voulez-vous le nombre total de colonnes? De plus, vous devez utiliser une syntaxe de jointure correcte, plutôt que des jointures implicites dans la clause WHERE.


Il y a un code hérité avec lequel je dois travailler avec et je dois vérifier sur un autre endroit combien de colonnes sont retournées. C'est plus comme un problème de débogage


Je n'ai pas besoin du compte enregistré, j'ai juste besoin du nombre total de colonnes renvoyées


Pourquoi ne pouvez-vous pas faire cela dans n'importe quel code que vous exécutez la requête de ... Si c'est en C #, par exemple, vous pouvez obtenir le nombre de colonnes retournées et les noms assez facilement.


La meilleure pratique consiste à énumérer les colonnes que vous souhaitez dans votre sélection, plutôt que d'utiliser *. Ensuite, vous avez un nombre fixe de colonnes et vous n'avez pas besoin de compter.


Je n'exègre aucun environnement de programmation, j'ai des requêtes que j'ai besoin de porter des services d'analyse en tant que tables de DataSource et que j'ai des problèmes, et il serait bien de savoir combien de colonnes sont retournées à des fins de débogage.


Nombre de colonnes de SQL Server


4 Réponses :


1
votes

moche je sais: xxx


2 commentaires

La question concerne spécifiquement une requête et non une table, cela ne répond donc pas à la question.


Il existe plusieurs requêtes différentes que je souhaite apprendre le nombre de colonnes qu'ils revenaient, pas seulement cet exemple de requête spécifique.



7
votes

Voici une méthode:

select top 0
into _MYLOCALTEMPTABLE
from (your query here) t

select count(*)
from Information_Schema.Columns c
where table_name = '_MYLOCALTEMPTABLE'


0 commentaires

2
votes

Essayez ceci; xxx


0 commentaires

7
votes

Vous n'avez pas spécifié votre version SQL Server, mais je suppose que ce n'est pas 2012. Cependant, les futurs lecteurs de cette question pourraient être sur 2012 et je pose donc cette réponse pour eux.

SQL Server 2012 fournit Un ensemble de procédures permettant de fournir plus de métadonnées sur les requêtes et les paramètres. Dans ce cas, la procédure stockée SP_DESCRIER_FIRST_RESULT_SET fournira une forme tabulaire pratique. P>

Il existe également une fonction DMO, sys.dm_exec_describe_first_Result_set A>, pour fournir un contenu similaire qui est ce que vous voudriez utiliser dans votre exemple p> xxx pré>

Les nouvelles options de découverte de métadonnées remplacent fmtonly , comment on résoudrait ce problème avant 2012. Mes côtelettes TSQL ne sont apparemment pas assez forts pour faire quoi que ce soit utile avec elle et je devrais plutôt renflouer une langue .NET pour travailler avec la sortie de FMTONLY. P>

SET FMTONLY ON;
SELECT  *
FROM    A1, A2;
SET FMTONLY OFF;


1 commentaires

C'était un économiseur de vie dans mon cas car je ne peux pas utiliser de sélectionner avec ma requête pour analyser une table. Merci!