Pregunta

Escenario: Necesito extraer información de una base de datos de Visual FoxPro; Sin embargo, ejecutar consultas de gran tamaño contra esta tiene una tendencia a bloquear el sistema para arriba. Para resolver esto, ponemos límites en el lugar que canceló la consulta si funcionara más allá de una cierta cantidad de tiempo, y se limita el número de filas que volvería.

¿Hay una manera de tener una consulta con "SELECT TOP ###", sino también devuelven el número real de filas encontrado a través de la declaración? O es la única manera de ejecutar la consulta dos veces? (Razón es que todavía podemos tener la consulta ejecuta a través, pero informar al usuario de lo que está pasando. Es decir, "Primera ### se muestra de ### artículos encontrados").

Mi juicio inicial era simplemente añadir un "COUNT (*)" a la parte seleccionada de la declaración, pero que no acababa de lograr lo que estaba buscando (que devuelve el número correcto de filas, pero sólo volvió una fila para el resto de los datos).

¿Fue útil?

Solución

Si entiendo bien la pregunta, se puede hacer una subselección, pero eso significa que llame al recuento de SQL para cada fila devuelta:

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

Esto le dará los mejores 10 filas con una columna adicional en cada llamados totalRows, que contiene el recuento de todas las filas de la tabla.

Personalmente, sin embargo, que acababa de ejecutar una consulta separada para obtener la parte superior n filas y el recuento.

Otros consejos

Usted tendría que ejecutar 2 Selecciona separadas. Uno de recuperar el recuento de filas devueltas por la consulta y luego para volver al subconjunto de registros para una página en particular.

Se puede optimizar este sólo recuperar el recuento total de una vez, cuando se recupera la primera "página" (es decir, no hacen todo el recuento de páginas posteriores)

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top