Saltar al contenido

Paginación con el procedimiento almacenado

Solución:

Estoy agregando una respuesta ya que muchas de las otras respuestas sugieren SQL dinámico, lo cual no es una mejor práctica. Puede agregar paginación usando un OFFSET-FETCH cláusula, que le proporciona una opción para obtener solo una ventana o página de resultados de un conjunto de resultados.

Nota: OFFSET-FETCH se puede utilizar solo con el ORDER BY cláusula.

Ejemplo:

SELECT First Name + ' ' + Last Name FROM Employees 
ORDER BY First Name 
OFFSET 10 ROWS FETCH NEXT 5 ROWS ONLY;

Una forma (posiblemente no la mejor) de hacerlo es usar SQL dinámico

CREATE PROCEDURE [sp_Mk]
 @page INT,
 @size INT,
 @sort nvarchar(50) ,
 @totalrow INT  OUTPUT
AS
BEGIN
    DECLARE @offset INT
    DECLARE @newsize INT
    DECLARE @sql NVARCHAR(MAX)

    IF(@page=0)
      BEGIN
        SET @offset = @page
        SET @newsize = @size
       END
    ELSE 
      BEGIN
        SET @offset = @page*@size
        SET @newsize = @size-1
      END
    SET NOCOUNT ON
    SET @sql="
     WITH OrderedSet AS
    (
      SELECT *, ROW_NUMBER() OVER (ORDER BY " + @sort + ') AS ''Index''
      FROM [dbo].[Mk] 
    )
   SELECT * FROM OrderedSet WHERE [Index] BETWEEN ' + CONVERT(NVARCHAR(12), @offset) + ' AND ' + CONVERT(NVARCHAR(12), (@offset + @newsize)) 
   EXECUTE (@sql)
   SET @totalrow = (SELECT COUNT(*) FROM [Mk])
END

Aquí está SQLFiddle manifestación

Asumiendo@sort es el column name. prueba así

WITH OrderedSet AS
(
 SELECT *,
     ROW_NUMBER() OVER (ORDER BY (CASE @sort WHEN 'column_name' 
                                             THEN column_name END ) DESC)  
        AS 'Index'
  FROM [dbo].[Mk] 

 )

en lugar de proporcionar @sort variable put column name based on @sort. Espero que esto funcione.

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *