高效分頁儲存過程
儲存過程與頁面呼叫如下:
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,頁尺寸 pageinde...
高效分頁儲存過程
儲存過程與頁面呼叫如下 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...