sql >> Database >  >> RDS >> Sqlserver

Moeite met het schrijven van Stored Proc om gegevens op te halen voor Jqgrid Paginering

Het lijkt mij dat je de code kunt repareren door OrderBy . te gebruiken in GetFirst en GetNext onderdeel van de WITH-clausule, maar niet in de GetAll een deel. De bijbehorende code gaat over het volgende

ALTER PROCEDURE [dbo].[NewStoredProc] 
(
    @skip int,
    @pageSize int,
    @OrderBy Varchar(20),
    @OrderByDirection Varchar(10)
 )

AS
BEGIN
    DECLARE @records int;
    SET NOCOUNT ON;
    SET @records =(select count(*) from Data where Status='A');

    IF @skip <= 0
        SELECT TOP (@pageSize) * from Data where Status='A' 
        ORDER BY CASE WHEN @OrderBy='Column1' AND @OrderByDirection='D'
                      THEN Column1
                 END DESC,
                 CASE WHEN @OrderBy='Column1' AND @OrderByDirection !='D'
                      THEN Column1
                 END,
                 CASE WHEN @OrderBy='Column2' AND @OrderByDirection='D'
                      THEN Column2
                 END DESC,
                 CASE WHEN @OrderBy='Column2' AND @OrderByDirection !='D'
                      THEN Column2
                 END,
                 CASE WHEN @OrderBy='Column3' AND @OrderByDirection='D'
                      THEN Column3
                 END DESC,
                 CASE WHEN @OrderBy='Column3' AND @OrderByDirection !='D'
                      THEN Column3
                 END
    ELSE
        WITH GetAll AS (
            SELECT * from Data where Status='A'
        ),GetFirst AS (
            SELECT TOP (@skip) *
            FROM GetAll
            ORDER BY CASE WHEN @OrderBy='Column1' AND @OrderByDirection='D'
                          THEN Column1
                     END DESC,
                     CASE WHEN @OrderBy='Column1' AND @OrderByDirection !='D'
                          THEN Column1
                     END,
                     CASE WHEN @OrderBy='Column2' AND @OrderByDirection='D'
                          THEN Column2
                     END DESC,
                     CASE WHEN @OrderBy='Column2' AND @OrderByDirection !='D'
                          THEN Column2
                     END,
                     CASE WHEN @OrderBy='Column3' AND @OrderByDirection='D'
                          THEN Column3
                     END DESC,
                     CASE WHEN @OrderBy='Column3' AND @OrderByDirection !='D'
                          THEN Column3
                     END
        ),GetNext AS (
            SELECT TOP (@pageSize) nt.*
            FROM GetAll AS nt
                LEFT OUTER JOIN GetFirst AS f ON f.Col1=nt.Col1
            WHERE f.Col1 IS  NULL
            ORDER BY CASE WHEN @OrderBy='Column1' AND @OrderByDirection='D'
                          THEN nt.Column1
                     END DESC,
                     CASE WHEN @OrderBy='Column1' AND @OrderByDirection !='D'
                          THEN nt.Column1
                     END,
                     CASE WHEN @OrderBy='Column2' AND @OrderByDirection='D'
                          THEN nt.Column2
                     END DESC,
                     CASE WHEN @OrderBy='Column2' AND @OrderByDirection !='D'
                          THEN nt.Column2
                     END,
                     CASE WHEN @OrderBy='Column3' AND @OrderByDirection='D'
                          THEN nt.Column3
                     END DESC,
                     CASE WHEN @OrderBy='Column3' AND @OrderByDirection !='D'
                          THEN nt.Column3
                     END
        )  
        SELECT * FROM GetNext

    RETURN @records;
END



  1. Autonome transactie in PostgreSQL 9.1

  2. Voorwaardelijke telling/som in selectie

  3. Hoe alleen t-sql-opdrachten in SQL Profiler te controleren?

  4. Aanmaaktabel met php