Sqlserver
 sql >> база данни >  >> RDS >> Sqlserver

Най-доброто решение за пейджинг, използващо SQL Server 2005?

За таблица с такъв размер използвайте израз на обща таблица (CTE) и ROW_NUMBER; използвайте малка функция, за да изчислите записите, които да върнете въз основа на @PageNumber и @PageSize променливи (или както искате да ги наречете). Прост пример от една от нашите съхранени процедури:

-- calculate the record numbers that we need

DECLARE @FirstRow INT, @LastRow INT
SELECT  @FirstRow   = ((@PageNumber - 1) * @PageSize) + 1,
        @LastRow    = ((@PageNumber - 1) * @PageSize) + @PageSize

;
WITH CTE AS
(
    SELECT [Fields]
           , ROW_NUMBER() OVER (ORDER BY [Field] [ASC|DESC]) as RowNumber 
    FROM [Tables]
    WHERE [Conditions, etc]
)
SELECT * 
       -- get the total records so the web layer can work out
       -- how many pages there are
       , (SELECT COUNT(*) FROM CTE) AS TotalRecords
FROM CTE
WHERE RowNumber BETWEEN @FirstRow AND @LastRow
ORDER BY RowNumber ASC


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Защо типът DATETIME на SQL Server спестява време в тикове от 1/300 от секундата?

  2. Преглед на историята на заданията на агент на SQL Server с SSMS

  3. Месеци между две дати

  4. Как да добавите разделител към конкатениран низ в SQL Server – CONCAT_WS()

  5. Дали един израз на SQL Server е атомичен и последователен?