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