sql server 分頁儲存過程

2021-09-22 04:46:14 字數 3579 閱讀 8598

sql server 分頁儲存過程,在網上找了很多,但是都不能用或者不能很好的用,特別綜合大家的智慧型,自己寫了乙個,而且通過visual studio除錯,通過實際資料測試

set ansi_nulls on

set quoted_identifier on go

alter

procedure [dbo].[proc_listpage]

@tblname varchar(max), ----要顯示的表或多個表的連線

@fldname nvarchar(2000) , ----要顯示的字段列表

@pagesize int, ----每頁顯示的記錄個數

@page int, ----要顯示那一頁的記錄

@pagecount int = 1 output, ----查詢結果分頁後的總頁數

@counts int = 1 output, ----查詢到的記錄數

@strcondition nvarchar(1000) = null, ----查詢條件,不需where

@id nvarchar(150), ----主表的主鍵

@dist bit = 0 ----是否新增查詢欄位的 distinct 預設0不新增/1新增 as

set nocount on

declare @sqltmp nvarchar(max) ----存放動態生成的sql語句

declare @strtmp nvarchar(max) ----存放取得查詢結果總數的查詢語句

declare @strid nvarchar(1000) ----存放取得查詢開頭或結尾id的查詢語句

/*declare @strsorttype nvarchar(500) ----資料排序規則a

declare @strfsorttype nvarchar(500) ----資料排序規則b*/

declare @sqlselect nvarchar(500) ----對含有distinct的查詢進行sql構造

declare @sqlcounts nvarchar(500) ----對含有distinct的總數查詢進行sql構造

if @dist = 0

begin

set @sqlselect = 'select '

set @sqlcounts = 'count(*)'

endelse

begin

set @sqlselect = 'select distinct '

set @sqlcounts = 'count(distinct '+@id+')'

end--------生成查詢語句--------

--此處@strtmp為取得查詢結果數量的語句

if @strcondition is

null

or @strcondition=''

--沒有設定顯示條件

begin

set @sqltmp = @fldname + ' from ' + @tblname

set @strtmp = @sqlselect+' @counts='+@sqlcounts+' from '+@tblname

set @strid = ' from ' + @tblname

end

else

begin

set @sqltmp = + @fldname + 'from ' + @tblname + ' where (1>0) ' + @strcondition

set @strtmp = @sqlselect+' @counts='+@sqlcounts+' from '+@tblname + ' where (1>0) ' + @strcondition

set @strid = ' from ' + @tblname + ' where (1>0) ' + @strcondition

end

----取得查詢結果總數量-----

exec sp_executesql @strtmp,n'@counts int out ',@counts out

declare @tmpcounts int

if @counts = 0

set @tmpcounts = 1

else

set @tmpcounts = @counts

--取得分頁總數

set @pagecount=(@tmpcounts+@pagesize-1)/@pagesize

/**//**當前頁大於總頁數 取最後一頁**/

if @page>@pagecount

set @page=@pagecount

--/*-----資料分頁2分處理-------*/

declare @pageindex int

--總數/頁大小

declare @lastcount int

--總數%頁大小

set @pageindex = @tmpcounts/@pagesize

set @lastcount = @tmpcounts%@pagesize

if @lastcount > 0

set @pageindex = @pageindex + 1

else

set @lastcount = @pagesize

--//***顯示分頁

if @strcondition is

null

or @strcondition=''

--沒有設定顯示條件

begin

set @sqltmp =@sqlselect+' top '+ cast(@pagesize as

varchar(4))+' '+ @fldname+' from '+@tblname

+' where '+@id+' not in('+ @sqlselect+' top '+ cast(@pagesize*(@page-1) as

varchar(20)) +' '+ @id +' from '+@tblname

+' order by '+ ' '+ @id+')'

+' order by '+ ' '+ @id

end

else

--有查詢條件

begin

set @sqltmp =@sqlselect+' top '+ cast(@pagesize as

varchar(4))+' '+ @fldname +' from '+@tblname

+' where '+@id+' not in('+ @sqlselect+' top '+ cast(@pagesize*(@page-1) as

varchar(20)) +' '+ @id +' from '+@tblname

+' where (1>0) ' + @strcondition + ' order by '+ ' '+ @id +')'

+' ' + @strcondition + ' order by '+ ' '+ @id

end

------返回查詢結果-----

exec sp_executesql @sqltmp

print @strtmp

yaocoder

SQL SERVER分頁儲存過程

使用儲存過程寫乙個分頁查詢 select from t users gocreate proc usp getdatafy pagesize int 10,每頁記錄條數 定義變數並賦初始值 pageindex int 1,當前要檢視第幾頁的記錄 sumcount int output,總的記錄條數 ...

SqlServer分頁儲存過程

高效分頁語句 1 row number select from select row number over order byrpid as rowfrom ou rolepermission as twheret.row 0 andt.row 10 2,top 分頁查詢 select top 10...

SqlServer 儲存過程分頁

適用於2005以上版本 create procedure dbo sp getpagelist columns nvarchar max 查詢字段 tablename nvarchar max 表名 檢視 orderby nvarchar max 排序字段 swhere nvarchar max 查...