2010-10-24 10 views
6

Al consultar una tabla en el servidor sql, estoy tratando de obtener solo la página actual de registros. Sin embargo necesito el número total de registros que se devuelven para la consulta en particular para calcular el número de páginas. Cómo hacer esto de manera eficiente sin escribir otra consulta para contar los registros.Manera eficiente de obtener el número total de registros en el servidor SQL durante la búsqueda

WITH allentities 
     AS (SELECT Row_number() OVER (ORDER BY se.entityid ASC) AS 
        rowid 
        ,empid 
        ,lastname 
        ,firstname 
        ,d.depname 

      FROM emp e join dep d on e.depid=d.depid) 
    SELECT * 
    FROM allentities 
    WHERE rowid >= @pageid 
      AND rowid <= @pageid + 20 
+1

... pero la buena noticia es que USTEDES pueden arreglar eso. –

Respuesta

4

Si agrega un segundo ROW_NUMBER() que ordena en lugar de ASC, puede calcular el número total de registros sumando los dos recuentos juntos y restando uno. Cualquier fila en el conjunto rsult tendrá el número total correcto de filas:

WITH allentities 
     AS (SELECT Row_number() OVER (ORDER BY se.entityid ASC) AS 
        rowid 
        ,empid 
        ,lastname 
        ,firstname 
        ,d.depname 
        ,ROW_NUMBER() OVER (ORDER BY se.entityid DESC) AS rowIdNeg 
      FROM emp e join dep d on e.depid=d.depid) 
    SELECT * 
      ,rowid + rowIdNeg - 1 as totalRecords 
    FROM allentities 
    WHERE rowid >= @pageid 
      AND rowid <= @pageid + 20 
+0

esto es impresionante. ¿Es esto ventajoso en términos de rendimiento en comparación con mi consulta anterior? –

+0

@Sundararajan S - habrá un costo adicional para el cálculo del segundo 'ROW_NUMBER', pero cuán grande es esto dependerá en gran medida de la disposición de sus datos e índices. –

+0

respuesta impresionante thnx – MonsterMMORPG

0

Si su aplicación lo permite, puede intentar instalar y usar el índice de búsqueda para realizar tales consultas. Los índices de búsqueda tienen una funcionalidad para trabajar con paginación.

Se puede utilizar por ejemplo http://lucene.apache.org/solr/. Se puede configurar para indexar el servidor Sql db.

+0

No. Quiero hacer esto con solo servidor SQL y consulta SQL –

Cuestiones relacionadas