sql >> Database >  >> RDS >> Sqlserver

SQL Server 2008-pagingmethoden?

De volgende T-SQL-opgeslagen procedure is een zeer efficiënte implementatie van paging. DE SQL-optimizer kan de eerste ID zeer snel vinden. Combineer dit met het gebruik van ROWCOUNT, en je hebt een aanpak die zowel CPU-efficiënt als lees-efficiënt is. Voor een tabel met een groot aantal rijen is het zeker beter dan elke benadering die ik heb gezien met een tijdelijke tabel of tabelvariabele.

NB:Ik gebruik in dit voorbeeld een sequentiële identiteitskolom, maar de code werkt op elke kolom die geschikt is voor paginasortering. Ook hebben reeksonderbrekingen in de gebruikte kolom geen invloed op het resultaat, aangezien de code een aantal rijen selecteert in plaats van een kolomwaarde.

EDIT:Als u sorteert op een kolom met mogelijk niet-unieke waarden (bijv. LastName), voeg dan een tweede kolom toe aan de Order By-clausule om de sorteerwaarden weer uniek te maken.

CREATE  PROCEDURE dbo.PagingTest
(
    @PageNumber int,
    @PageSize int
)
AS

DECLARE @FirstId int, @FirstRow int

SET @FirstRow = ( (@PageNumber - 1) * @PageSize ) + 1
SET ROWCOUNT @FirstRow

-- Add check here to ensure that @FirstRow is not
-- greater than the number of rows in the table.

SELECT   @FirstId = [Id]
FROM     dbo.TestTable
ORDER BY [Id]

SET ROWCOUNT @PageSize

SELECT   *
FROM     dbo.TestTable
WHERE    [Id] >= @FirstId
ORDER BY [Id]

SET ROWCOUNT 0
GO 


  1. Alternatieve oplossing voor DCount en DLookup met MS SQL Server Backend

  2. Reset AutoIncrement in SQL Server na verwijderen

  3. YEARWEEK() Voorbeelden – MySQL

  4. Lijst met elementen van getalnotatie in Oracle