教你快速掌握兩個分頁儲存過程的用法

2021-05-21 21:43:22 字數 3518 閱讀 3119

兩個分頁儲存過程的用法:

[basic_pagination2005]:只能在sqlserver2005下用;

[basic_pagination2000]:可在sqlserver2000和sqlserver2005下通用;

兩個儲存過程的引數是一樣的,其中的引數說明在**中已有注釋。

需要注意的是當@isrecount=1時,會返回記錄總數。所以在.net中需用dataset存放記錄集。

第乙個table是要查詢的字段資料,第二個table便是記錄總數。

1.basic_pagination2000

create procedure [dbo].[basic_pagination2000]

@tblname varchar(255), -- 表名

@fidlelist varchar(2000), --要查詢字段

@fldname varchar(255), -- 排序字段

@pagesize int, -- 頁尺寸

@pageindex int, -- 頁碼

@isrecount bit, -- 返回記錄總數, 非 0 值則返回

@ordertype bit, -- 設定排序型別, 非 0 值則降序

@strwhere varchar(1000) -- 查詢條件 (注意: 不要加 where)

asdeclare @strsql varchar(6000) -- 主語句

declare @strtmp varchar(100),@tmpwhere varchar(200) -- 臨時變數

declare @strorder varchar(400) -- 排序型別

if @ordertype != 0

begin

set @strtmp = '<(select min'

set @strorder = ' order by [' + @fldname +'] desc'

endelse

begin

set @strtmp = '>(select max'

set @strorder = ' order by [' + @fldname +'] asc'

endset @tmpwhere='';

if(@strwhere!='')

begin

set @tmpwhere=' where '+@strwhere;

endif @pageindex = 1

begin

set @strsql = 'select top '

+ str(@pagesize) +' '+@fidlelist+' '+'from ['

+ @tblname + '] ' + @tmpwhere + ' ' + @strorder

endelse

begin

set @strsql = 'select top '

+ str(@pagesize) + ' '+@fidlelist+' '+'from ['

+ @tblname + '] where

[' + @fldname + ']' + @strtmp + '(['

+ @fldname + ']) from

(select top ' + str((@pageindex-1)*@pagesize) + ' ['

+ @fldname + '] from

[' + @tblname + '] ' + @tmpwhere + ' '

+ @strorder + ') as tbltmp)

' + @tmpwhere + ' ' + @strorder

endexec(@strsql)

if @isrecount != 0

begin

set @strsql = 'select count(*)

as total from [' + @tblname + ']'+ @strwhere

exec (@strsql)

end

2.basic_pagination2005

alter procedure [dbo].[basic_pagination2005]

@tblname nvarchar(200), --表名

@fidlelist nvarchar(1000), --要查詢字段

@fldname nvarchar(100), --排序字段

@pagesize int, --頁尺寸

@pageindex int, --頁碼

@isrecount bit , -- 返回記錄總數, 非 0 值則返回

@ordertype bit, -- 設定排序型別, 非 0 值則降序

@strwhere nvarchar(1000) --查詢條件

asdeclare @sqlstr nvarchar(4000),

@tmpwhere nvarchar(4000),@tmporder nvarchar(100)

begin

if @ordertype != 0

begin

set @tmporder = @fldname +' desc '

endelse

begin

set @tmporder = @fldname +' asc '

endset @tmpwhere='';

if(@strwhere!='')

begin

set @tmpwhere=' where '+@strwhere;

endset @sqlstr=n'select * from

(select '+@fidlelist+', row_number() over(order

by '+@tmporder+') as row from '+@tblname+@tmpwhere+')

tmp where row between '+cast

(((@pageindex-1)*@pagesize+1) as nvarchar)+' and '+cast

(@pageindex*@pagesize as nvarchar);

exec sp_executesql @sqlstr

if @isrecount != 0

begin

set @sqlstr=n'select count(*) as total from '+ @tblname+@tmpwhere

exec sp_executesql @sqlstr

endend

兩個分頁儲存過程

drop proc dbo up getrecordbypage gocreate procedure dbo up getrecordbypage tblname varchar 255 表名 fldname varchar 255 主鍵欄位名 strcontent nvarchar 255 查詢...

快速掌握Lua 5 3 兩個完整的例子

將lua指令碼作為乙個小型的簡化版的 資料庫 展現了如何簡單高效的將這個 資料庫 中的資料轉化為網頁顯示。db.lua 檔案中內容。這裡看似是一張名為 entry 的表中儲存了許多資料,實際上在轉化程式中這時乙個名為 entry 的函式,引數是下面這個儲存了許多資料的 table 還記得 foo 與...

SQL Server未公開的兩個儲存過程

sp msforeachtable和sp msforeachdb是sql server的兩個系統儲存過程,存在於master資料庫當中,但是在sql server的聯機幫助中並沒有這兩個儲存過程,也就是說微軟並沒有把這兩個儲存過程編進sql server的聯機叢書中。那麼microsoft設計這兩個...