從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...