数据库:SQLServer分页查询整理
生活随笔
收集整理的這篇文章主要介紹了
数据库:SQLServer分页查询整理
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
作為程序員來說,與數據庫打交道是十分頻繁的分頁查詢是一個開發者必須掌握的基本知識點,目前整理了下面三種SQLServer分頁查詢語句的寫法,僅供參考。
一、Top Not IN 方式(查詢靠前的數據較快)
語法格式:
select top 條數 * from tablename where Id not in (select top pageSize*(pageIndex-1) Id from tablename)示例:
SELECT TOP 2 * FROM Users WHERE Id NOT IN (SELECT TOP 2 Id FROM Users)二、ROW_NUMBER()?OVER()方式 ?(查詢靠后的數據速度比上一種較快)
語法格式:
SELECT * FROM (SELECT *, ROW_NUMBER() OVER(Order by Id ) AS RowNumber from tablename ) as b where RowNumber between pageIndex-1*pageSize and pageIndex*pageSize示例:
SELECT * FROM ( SELECT *, ROW_NUMBER() OVER (ORDER BY Id) AS RowNumber FROM Users ) as b where RowNumber BETWEEN 0 and 5三、offset?fetch?next方式 (速度優于前兩者,限制Sql2012版本以上可以使用)
語法格式:
select * from tablename order by Id offset pageIndex row fetch next pageSize row only示例:
select?*?from?Users???order?by?Id?offset?2?row?
fetch?next?5?row?only???
四、分頁存儲過程
create PROCEDURE GetPageData ( @TableName varchar(30),--表名稱 @IDName varchar(20),--表主鍵名稱 @PageIndex int,--當前頁數 @PageSize int--每頁大小 ) AS IF @PageIndex > 0 BEGIN set nocount on DECLARE @PageLowerBound int,@StartID int,@sql nvarchar(225) SET @PageLowerBound = @PageSize * (@PageIndex-1) IF @PageLowerBound<1 SET @PageLowerBound=1 SET ROWCOUNT @PageLowerBound SET @sql=N'SELECT @StartID = ['+@IDName+'] FROM '+@TableName+' ORDER BY '+@IDName exec sp_executesql @sql,N'@StartID int output',@StartID output SET ROWCOUNT 0 SET @sql='select top '+str(@PageSize) +' * from '+ @TableName+' where ['+@IDName+'] >='+ str(@StartID) +' ORDER BY ['+@IDName+'] ' EXEC(@sql) set nocount off ENDIT技術分享社區
個人博客網站:https://programmerblog.xyz
文章推薦程序員效率:畫流程圖常用的工具程序員效率:整理常用的在線筆記軟件遠程辦公:常用的遠程協助軟件,你都知道嗎?51單片機程序下載、ISP及串口基礎知識硬件:斷路器、接觸器、繼電器基礎知識
總結
以上是生活随笔為你收集整理的数据库:SQLServer分页查询整理的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 项目管理基础:系统评价相关知识
- 下一篇: 数据库设计:数据库设计的基本步骤介绍