Domanda

Scenario: Ho bisogno di tirare le informazioni da un database di Visual FoxPro; Tuttavia, l'esecuzione query di grandi dimensioni contro questo ha la tendenza a bloccare il sistema in su. Per risolvere questo, abbiamo messo dei limiti sul posto che ha annullato la query se si correva passato un certo periodo di tempo, e limitato il numero di righe che sarebbe tornato.

C'è un modo per avere una query con "SELECT ### TOP", ma anche restituire il numero effettivo di righe trovato attraverso la dichiarazione? O è l'unico modo per eseguire la query due volte? (Motivo è che possiamo ancora avere la query attraversano, ma informare l'utente di quello che sta succedendo. Vale a dire "First ### visualizzato di ### articoli trovati").

La mia prova iniziale era quello di semplicemente aggiungere un "COUNT (*)" per la parte di selezione della dichiarazione, ma che non riusciva a realizzare quello che cercavo (è tornato il numero corretto di righe, ma restituito solo una riga per il resto dei dati).

È stato utile?

Soluzione

Se ho capito bene la domanda, si potrebbe fare una selezione secondaria, ma che significherà si chiama il numero di SQL per ogni riga restituita:

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

Che vi darà le prime 10 righe con una colonna in più in ogni chiamati totalrows, contenente il conteggio di tutte le righe della tabella.

Personalmente, però, mi piacerebbe appena eseguito una query separata per ottenere il top n le righe e il conteggio.

Altri suggerimenti

Si avrebbe bisogno di eseguire 2 seleziona separati. Uno per recuperare il conteggio di righe restituite dalla query e poi tornare il sottoinsieme di record per una pagina particolare.

Si potrebbe ottimizzare questo da solo recuperando il conteggio totale, una volta, quando la prima "pagina" viene recuperato (vale a dire non fare tutto il conteggio per le pagine successive)

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top