sqlserver分頁(yè)有四種方法,先給大家介紹一種常用的
創(chuàng)新互聯(lián)建站專注于撫寧網(wǎng)站建設(shè)服務(wù)及定制,我們擁有豐富的企業(yè)做網(wǎng)站經(jīng)驗(yàn)。 熱誠(chéng)為您提供撫寧營(yíng)銷型網(wǎng)站建設(shè),撫寧網(wǎng)站制作、撫寧網(wǎng)頁(yè)設(shè)計(jì)、撫寧網(wǎng)站官網(wǎng)定制、小程序開發(fā)服務(wù),打造撫寧網(wǎng)絡(luò)公司原創(chuàng)品牌,更為您提供撫寧網(wǎng)站排名全網(wǎng)營(yíng)銷落地服務(wù)。
查看1到3條數(shù)據(jù)
假如查詢每頁(yè)大小為3,查詢第2頁(yè)的數(shù)據(jù)就是
select top 頁(yè)大小 *
from table1
where id
(select max (id) from
(select top ((頁(yè)碼-1)*頁(yè)大小) id from table1 order by id) as T
)
order by id
分頁(yè)的原理無(wú)非是根據(jù)傳遞的頁(yè)數(shù)和每頁(yè)行數(shù)算出從第幾行開始取多少行數(shù)據(jù)。所以根據(jù)你的參數(shù)你完全可以任意取數(shù)。
存儲(chǔ)過(guò)程:create Procedure pname
( @pageIndex int,@pageSize)
as
select * from tableName order by id
offset @pageIndex * pageSize fetch next pageSize rows only
分頁(yè):
sqlserver 在2008之前 使用 top 和 not int top 的方式來(lái)做分頁(yè)
2008以后使用 row_number() 函數(shù)作為分頁(yè)關(guān)鍵函數(shù)
2012使用 offset 1 fetch next 10 rows only
你問(wèn)了2個(gè)問(wèn)題,你可以優(yōu)先把視圖,存儲(chǔ)過(guò)程,觸發(fā)器等弄明白,分頁(yè)是查詢,在存儲(chǔ)過(guò)程里可以寫復(fù)雜的sql文,只是在運(yùn)行時(shí)是預(yù)編譯和參數(shù)化查詢防止sql注入
存儲(chǔ)過(guò)程:create Procedure pname
( @pageIndex int,@pageSize)
as
select * from tableName order by id
offset @pageIndex * pageSize fetch next pageSize rows only
分頁(yè):
sqlserver 在2008之前 使用 top 和 not int top 的方式來(lái)做分頁(yè)
2008以后使用 row_number() 函數(shù)作為分頁(yè)關(guān)鍵函數(shù)
2012使用 offset 1 fetch next 10 rows only
你問(wèn)了2個(gè)問(wèn)題,你可以優(yōu)先把視圖,存儲(chǔ)過(guò)程,觸發(fā)器等弄明白,分頁(yè)是查詢,在存儲(chǔ)過(guò)程里可以寫復(fù)雜的sql文,只是在運(yùn)行時(shí)是預(yù)編譯和參數(shù)化查詢防止sql注入
寫存儲(chǔ)過(guò)程 ..
SET QUOTED_IDENTIFIER ON
GO
SET ANSI_NULLS ON
GO
ALTER PROCEDURE usp_Province_pagination
@PageSize INT, --每頁(yè)的顯示的行數(shù)
@AbsolutePage INT, -- 當(dāng)前頁(yè)的頁(yè)數(shù)
@PageCount INT OUTPUT --總頁(yè)數(shù)
AS
DECLARE @BeginRecord INT --記錄每此從哪一行開始讀取
DECLARE @RecordCount INT --表中數(shù)據(jù)的總條數(shù)
DECLARE @sql NVARCHAR(1000)
SET @RecordCount = (SELECT count(*) FROM Province)
--表中沒有數(shù)據(jù)的情況
IF @RecordCount = 0
BEGIN
SET @PageCount = 0
RETURN(0)
END
-- 表中的總條數(shù)大于定義的每頁(yè)的行數(shù)的情況
IF @RecordCount @PageSize
BEGIN
-- 計(jì)算總能分多少頁(yè)
SET @PageCount = (@RecordCount + @PageSize - 1)/@PageSize
--當(dāng)前應(yīng)該從哪一行開始讀取
SET @BeginRecord = ((@AbsolutePage-1) * @PageSize)
SET @sql = N'SELECT TOP ' + cast(@PageSize AS NVARCHAR(100)) +' ProvinceID, provinceCode, ProvinceName
FROM Province
WHERE ProvinceID NOT IN
(SELECT TOP '+ CAST(@BeginRecord AS NVARCHAR(100)) + ' ProvinceID
FROM Province)'
EXECUTE sp_executesql @sql
END
ELSE -- -- 表中的總條數(shù)大于定義的每頁(yè)的行數(shù)情況
BEGIN
SET @PageCount = 1
SET @SQL = 'SELECT ProvinceID, provinceCode, ProvinceName FROM Province '
EXECUTE sp_executesql @sql
END
GO
SET QUOTED_IDENTIFIER OFF
GO
SET ANSI_NULLS ON
GO