2013-08-06 1 views
1

J'ai une procédure stockée qui ressemble le code SQL suivant:lignes de couting avant OFFSET-fetch

SELECT col1, col2, col3 FROM table1 
LEFT JOIN table2 
ON table1.col1 = table2.colWhatever 
OFFSET @var1 ROWS FETCH NEXT @var2 ROWS ONLY 

RETURN @@ROWCOUNT 

Cependant, je ne suis pas surpris qu'il retourne un nombre de lignes égal à @ var2, mais je voulais connaître le nombre de lignes que j'avais avant d'appliquer l'offset-fetch à la requête.

Quelle est la manière la plus propre et la plus efficace de le faire?

Répondre

2

Vous pouvez ajouter COUNT(*) OVER() à la liste SELECT - vous obtiendrez le nombre total de colonnes supplémentaires dans le jeu de résultats (rempli pour chaque ligne), mais vous pouvez le retirer lorsque vous ouvrez le résultat pour la première fois et l'ignorez ensuite sur.

De même, n'utilisez pas RETURN pour renvoyer le @@ROWCOUNT - c'est pour les codes d'état et d'erreur, pas pour les données. Utilisez un paramètre OUTPUT (mais je suppose que vous ne voulez pas vraiment cette valeur de toute façon, car il retournera la même chose que @var2, que vous connaissez déjà).

Questions connexes