SQL SERVER 通用分頁儲存過程,兩種用法

2021-08-20 09:07:34 字數 2229 閱讀 9071

從sqlserver 2005開始,提供了row_number()函式,利用函式生成的index來處理分頁,按照正常的邏輯思維都是傳pageindex和pagesize來完成分頁,昨天前端和我溝通,他們使用jquery.datatable.js外掛程式,而且經過了公司底層的封裝,pageindex需要變動一下,變成pageindex*pagesize來傳。 也就是說按每頁顯示30條算,第一次傳0,第二次傳30這樣來計算,我也是醉了。

create proc [dbo].[common_pagelist]

(@tab nvarchar(max),---表名

@strfld nvarchar(max), --欄位字串

@strwhere varchar(max), --where條件

@pageindex int, --頁碼

@pagesize int, --每頁容納的記錄數

@sort varchar(255), --排序欄位及規則,不用加order by

@isgetcount bit --是否得到記錄總數,1為得到記錄總數,0為不得到記錄總數,返回記錄集)as

declare @strsql nvarchar(max)

set nocount on;

if(@isgetcount = 1)

begin

set @strsql='select count(0) from ' + @tab + ' where ' + @strwhere

endelse

begin

set @strsql=' select * from (select row_number()

over(order by ' + @sort + ') as rownum, ' + @strfld + ' from ' + @tab + ' where ' + @strwhere + ') as dwhere

where rownum between ' + cast(((@pageindex-1)*@pagesize + 1) as nvarchar(20)) + ' and ' + cast((@pageindex*@pagesize) as nvarchar(20))

endexec (@strsql)

set nocount off;

create proc [dbo].[common_pagelist2]

(@tab nvarchar(max),---表名

@strfld nvarchar(max), --欄位字串

@strwhere varchar(max), --where條件

@startindex int, -- 開始行數

@pagesize int, --每頁容納的記錄數

@sort varchar(255), --排序欄位及規則,不用加order by

@isgetcount bit --是否得到記錄總數,1為得到記錄總數,0為不得到記錄總數,返回記錄集)as

declare @strsql nvarchar(max)

set nocount on;

if(@isgetcount = 1)

begin

set @strsql='select count(0) from ' + @tab + ' where ' + @strwhere

endelse

begin

declare @endindex int

if(@startindex>0)

begin

set @endindex=@startindex+@pagesize

set @startindex=@startindex+1

endelse

set @endindex=@startindex+@pagesize

set @strsql=' select * from (select row_number()

over(order by ' + @sort + ') as rownum, ' + @strfld + ' from ' + @tab + ' where ' + @strwhere + ') as dwhere

where rownum between ' + cast(@startindex as varchar(30)) + ' and ' + cast(@endindex as varchar(30))

endexec (@strsql)

set nocount off;

通用分頁儲存過程 sqlserver

獲取指定頁的資料 create procedure sppagination tblname varchar 255 表名 strgetfields varchar 1000 需要返回的列 fldname varchar 255 排序的欄位名 pagesize int 10,頁尺寸 pageinde...

sqlserver 通用分頁儲存過程

示例一create procedure commonpagination columns varchar 500 要顯示的列名,用逗號隔開 tablename varchar 100 要查詢的表名 ordercolumnname varchar 100 排序的列名 order varchar 50 ...

通用分頁儲存過程 sqlserver

獲取指定頁的資料 create procedure sppagination tblname varchar 255 表名 strgetfields varchar 1000 需要返回的列 fldname varchar 255 排序的欄位名 pagesize int 10,頁尺寸 pageinde...