2010-02-04 4 views
4

Scénario: Je dois extraire des informations d'une base de données Visual FoxPro; Cependant, l'exécution de requêtes de grande taille a tendance à bloquer le système. Pour résoudre ce problème, nous avons mis en place des limites qui annulaient la requête si elle dépassait un certain laps de temps et limitaient le nombre de lignes qu'elle renvoyait.SQL - Retour nombre limité de lignes, mais nombre de lignes complet

Existe-t-il un moyen d'avoir une requête avec "SELECT TOP ###", mais retourne aussi le nombre réel de lignes trouvées par l'instruction? Ou est le seul moyen d'exécuter la requête deux fois? (La raison en est que nous pouvons toujours faire passer la requête, mais informer l'utilisateur de ce qui se passe, c'est-à-dire "le premier # # # affiché de ### éléments trouvés"). Mon premier essai consistait simplement à ajouter un "COUNT (*)" à la partie sélectionnée de l'instruction, mais cela n'a pas vraiment accompli ce que je cherchais (il a renvoyé le nombre correct de lignes, mais seulement retourné une ligne pour le reste des données).

+0

n'a pas FoxPro été arrêté? –

+0

Visual FoxPro 9 SP2 sera pris en charge par Microsoft jusqu'en 2014. –

Répondre

2

Si je comprends bien la question, vous pouvez faire une sous-sélection, mais cela signifie que vous appelez le SQL de comptage pour chaque ligne retournée:

select top 10 field1, field2, (select count(*) from table) as totalrows from table 

Cela vous donnera les 10 premières lignes avec une colonne supplémentaire dans chaque totalrows appelé, contenant le nombre de toutes les lignes de la table.

Personnellement cependant, je voudrais juste exécuter une requête distincte pour obtenir le haut n lignes et le nombre.

+0

C'est ce que j'ai pensé, mais j'espérais qu'il y avait un moyen de le faire dans une seule requête – John

+0

que diriez-vous de le sélectionner dans une variable séparée, comme @monRowsCount = Select COUNT (*) de la table , puis placez-la dans une requête telle que: sélectionnez le top 10 champ1, champ2, @myRowsCount comme totalrows de la table –

2

Vous devez exécuter 2 SELECT séparés. Un pour récupérer le nombre de lignes retournées par la requête, puis pour renvoyer le sous-ensemble d'enregistrements pour une page particulière.

Vous pouvez optimiser ce que par la récupération du nombre total une fois, lorsque la première « page » est récupéré (à savoir ne pas faire le compte de l'ensemble des pages suivantes)