Il n'existe pas de solution simple pour ce faire. Vous pouvez obtenir une estimation pour le nombre total de lignes dans une table, par ex. à partir des vues du catalogue système.
Mais il n'y a aucun moyen de le faire pour un ensemble donné de critères dans une clause WHERE - soit vous devez garder des comptes pour chaque ensemble de critères et les valeurs, ou vous devez utiliser la magie noire pour trouver cela en dehors. Le seul endroit où SQL Server conserve quelque chose qui irait dans cette direction est les statistiques qu'il conserve sur les indices. Ceux-ci auront certaines informations sur le type de valeurs qui se produisent à quelle fréquence dans un index - mais honnêtement, je n'ai aucune idée si (et comment) vous pourriez tirer parti de l'information dans les statistiques dans vos propres requêtes ......
Si vous devez vraiment connaître le nombre de lignes correspondant à un certain critère, vous devez effectuer un décompte quelconque (SELECT COUNT(*) FROM dbo.YourTable WHERE (yourcriteria)
ou autre).
Quelque chose d'autre pourrait être quelque chose comme ceci:
- Enveloppez votre déclaration
SELECT
dans un CTE (Common Table Expression)
- définissent un
ROW_NUMBER()
dans ce CTE de commander vos données par une colonne (ou un ensemble de colonnes
- ajouter une seconde
ROW_NUMBER()
à cet CTE qui commande vos données par la même colonne (ou colonnes) - mais dans la direction opposée (DESC
vs.ASC
)
Quelque chose comme ceci:
;WITH YourDataCTE AS
(
SELECT (list of columns you need),
ROW_NUMBER() OVER(ORDER BY <your column>) AS 'RowNum',
ROW_NUMBER() OVER(ORDER BY <your column> DESC) AS 'RowNum2'
FROM
dbo.YourTable
WHERE
<your conditions here>
)
SELECT *
FROM YourDataCTE
Faire cela, vous obtiendrez l'effet suivant:
- votre première ligne dans votre jeu de résultats contiendra vos colonnes de données habituelles
- le premier
ROW_NUMBER()
contiendra la valeur 1
- la seconde
ROW_NUMBER()
contiendra le nombre total de lignes correspondant à cet ensemble de critères
Il est étonnamment bon de traiter des ensembles de résultats de taille petite à moyenne - je n'ai pas encore essayé de savoir comment il résiste à de très grands ensembles de résultats - mais il pourrait être quelque chose à enquêter et voir si cela fonctionne.
Les tables sont-elles énormes? Exécuter quelque chose toutes les 5-10 minutes n'est pas si souvent que cela devrait affecter le serveur. –
Oui, les tables peuvent devenir assez énormes. J'ai oublié de mentionner cela! Merci! –
Énorme n'est pas un adjectif très utile dans le monde des données. C'est complètement relatif à l'expérience de chaque personne. –