2010-07-30 4 views
1

Je suis dans une situation très, très serrée ici. J'ai une requête SQL en cours d'exécution sur SQL Server 2005:SQL Server Sélectionnez COUNT sans utiliser la fonction d'agrégation ou le groupe par

SELECT col1,col2,col3 FROM myTable 

Ce qui bien sûr donne:

col1 | col2 | col3 
------------------ 
1 | a | i 
2 | b | ii 

etc

je dois, si possible, ajoutez une requête COUNT de sorte qu'il sera renvoie le nombre d'enregistrements renvoyés. Je ne peux pas utiliser GROUP BY ou une fonction d'agrégat (c'est un très bord cas sur certains très logiciel inflexible).

Idéalement, quelque chose comme ceci:

SELECT col1,col2,col3,COUNT(NumberOfRows) as NumRows FROM myTable 

col1 | col2 | col3| NumRows 
--------------------------- 
1 | a | i | 2 
2 | b | ii | 2 

Je me rends compte que cela est mauvais. Et inefficace. Et contre toutes les bonnes pratiques. Mais je suis dans un coin avec un logiciel dont l'architecture a été figée dans la pierre en 1991!

Répondre

2

Euh, il se trouve que mon collègue est revenu avec une réponse 30 secondes après avoir posé la question.

La syntaxe correcte est:

SELECT col1,col2,col3,@@ROWCOUNT as NumRows FROM myTable 
1

ressemble à l'aide @@ ROWCOUNT retourne le nombre de lignes traitées par le précédent requête, donc je ne suis pas sûr que ce soit une solution valable . Je pense que c'est parce que @@ ROWCOUNT est défini en interne après la requête est exécutée, il est donc préférable de l'utiliser une fois la requête terminée. Par conséquent, il ne retournera pas le nombre de lignes traitées par la requête dans laquelle il est placé.