高效分頁儲存過程

2022-01-24 12:51:14 字數 3110 閱讀 7068

儲存過程與頁面呼叫如下:

create procedure search_sp

@tblname varchar(255), -- 表名

@strgetfields varchar(1000) = '*', -- 需要返回的列

@fldname varchar(255)='', -- 排序的欄位名

@pagesize int = 10, -- 頁尺寸

@pageindex int = '', -- 頁碼

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

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

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

as declare @strsql  nvarchar(4000) -- 主語句

declare @strtmp varchar(110) -- 臨時變數

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

if @docount != 0

begin

if @strwhere !=''

set @strsql = 'select count(1) as total from [' + @tblname + '] where '+@strwhere

else

set @strsql = 'select count(1) as total from [' + @tblname + ']'

end

--以上**的意思是如果@docount傳遞過來的不是0,就執行總數統計。以下的所有**都是@docount為0的情況

else

begin

if @ordertype != 0

begin

set @strtmp = '< (select min'

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

--如果@ordertype不是0,就執行降序,這句很重要!

end

else

begin

set @strtmp = '> (select max'

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

end

if @pageindex = 1

begin

if @strwhere != ''

set @strsql = 'select top ' + str(@pagesize) +' '+@strgetfields+ ' from [' + @tblname + '] where ' + @strwhere + ' ' + @strorder

else

set @strsql = 'select top ' + str(@pagesize) +' '+@strgetfields+ ' from ['+ @tblname + '] '+ @strorder

--如果是第一頁就執行以上**,這樣會加快執行速度

end

else

begin

--以下**賦予了@strsql以真正執行的sql**

set @strsql = 'select top ' + str(@pagesize) +' '+@strgetfields+ ' from ['

+ @tblname + '] where [' + @fldname + ']' + @strtmp + '(['+ @fldname + ']) from (select top ' + str((@pageindex-1)*@pagesize) + ' ['+ @fldname + '] from [' + @tblname + ']' + @strorder + ') as tbltmp)'+ @strorder

if @strwhere != ''

set @strsql = 'select top ' + str(@pagesize) +' '+@strgetfields+ ' from ['

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

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

+ @fldname + '] from [' + @tblname + '] where ' + @strwhere + ' '

+ @strorder + ') as tbltmp) and ' + @strwhere + ' ' + @strorder

end

end

exec sp_executesql @strsql

go頁面呼叫:

searchtext=chkstr(request("searchtext"))

types=chkstr(request("type"))

tblname="search_sp"

strgetfields="*"

fldname="info_id"

if trim(searchtext)="" then

response.end()

end if

if request("page")="" then

page=1

else

page=request("page")

end if

if types<>"" then

strwhere="title like ''%"&searchtext&"%'' and type=''"&types&"''"

else

strwhere="title like ''%"&searchtext&"%''"

end if

strsql="exec search_sp  'info','info_id,type,sortid,title,dateandtime','info_id',30,'"&page&"',0,1,'"&strwhere&"'"

set rs = conn.execute(strsql)

高效分頁儲存過程

高效分頁儲存過程 儲存過程與頁面呼叫如下 create procedure search sp tblname varchar 255 表名 strgetfields varchar 1000 需要返回的列 fldname varchar 255 排序的欄位名 pagesize int 10,頁尺寸...

高效分頁儲存過程

儲存過程與頁面呼叫如下 create procedure search sp tblname varchar 255 表名 strgetfields varchar 1000 需要返回的列 fldname varchar 255 排序的欄位名 pagesize int 10,頁尺寸 pageinde...

高效分頁儲存過程

儲存過程與頁面呼叫如下 create procedure search sp tblname varchar 255 表名 strgetfields varchar 1000 需要返回的列 fldname varchar 255 排序的欄位名 pagesize int 10,頁尺寸 pageinde...