Comment savoir si SQL Server coupe le résultat si TOP est utilisé?

J'ai cette requête SQL:

SELECT TOP 10 * FROM MyTable 

Comment puis-je savoir si les résultats ont été coupés court, c'est-à-dire que MyTable a réellement plus de 10 lignes?

Le moyen le plus simple consiste à append une colonne COUNT..OVER qui renvoie le nombre total de lignes de la table dans la même requête:

 SELECT TOP 10 *, COUNT(*) OVER() As TotalRows FROM MyTable 

Ce total est calculé après l'exécution des clauses FROM et WHERE, mais avant l'application de la clause TOP.

Tricher:

 SELECT TOP 11 * FROM MyTable 

et vérifiez s'il y a 11 rangées 🙂 Puis ignorez la onzième rangée. Notez que d'un commentaire que vous avez écrit, vous n'avez peut-être pas compris: vous faites cette requête au lieu de la requête TOP 10 .

S'il y a <= 10 lignes, alors l'set du résultat aurait été returnné par TOP 10 . S'il y a 11 rangs, il est clair qu'un TOP 10 n'aurait pas été suffisant.

Vous pouvez utiliser COUNT pour get le nombre total de lignes.

 SELECT COUNT(*) FROM MyTable 

Vous pouvez vérifier si ce résultat est supérieur à 10 pour déterminer s'il contient plus de 10 lignes.

Vous pouvez returnner le nombre total de lignes en utilisant count(*) comme colonne supplémentaire.

Quelque chose comme ça:

 select top 10 T1.*, T2.Total from MyTable as T1 outer apply (select count(*) as Total from MyTable) as T2