Sqlserver
 sql >> Datenbank >  >> RDS >> Sqlserver

Paging-Methoden von SQL Server 2008?

Die folgende gespeicherte T-SQL-Prozedur ist sehr effiziente Implementierung von Paging. DER SQL-Optimierer findet die erste ID sehr schnell. Kombinieren Sie dies mit der Verwendung von ROWCOUNT, und Sie haben einen Ansatz, der sowohl CPU-effizient als auch leseeffizient ist. Für eine Tabelle mit einer großen Anzahl von Zeilen schlägt es sicherlich jeden Ansatz, den ich mit einer temporären Tabelle oder Tabellenvariable gesehen habe.

NB:Ich verwende in diesem Beispiel eine sequentielle Identitätsspalte, aber der Code funktioniert mit jeder Spalte, die für die Seitensortierung geeignet ist. Außerdem wirken sich Sequenzunterbrechungen in der verwendeten Spalte nicht auf das Ergebnis aus, da der Code statt eines Spaltenwerts eine Anzahl von Zeilen auswählt.

BEARBEITEN:Wenn Sie nach einer Spalte mit möglicherweise nicht eindeutigen Werten (z. B. LastName) sortieren, fügen Sie der Order By-Klausel eine zweite Spalte hinzu, um die Sortierwerte wieder eindeutig zu machen.

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