Asp Sqlserver2005 分頁儲存過程

2021-04-20 07:08:29 字數 4529 閱讀 9983

--t-sql

set ansi_nulls on

set quoted_identifier on

goalter procedure [dbo].[product_page]

@rowstotal int output,   --輸出總記錄數

@tablenames varchar(1000),    --表名,可以是多個表,但不能用別名

@primarykey varchar(100),    --主鍵,可以為空,但@order為空時該值不能為空

@fields    varchar(1000),        --要取出的字段,可以是多個表的字段,可以為空,為空表示select *

@pagesize int,            --每頁記錄數

@currentpage int,        --當前頁,0表示第1頁

@filter varchar(200) = '',    --條件,可以為空,不用填 where

@group varchar(200) = '',    --分組依據,可以為空,不用填 group by

@order varchar(200) = ''    --排序,可以為空,為空缺省按主鍵公升序排列,不用填 order by

asbegin

declare @sortcolumn varchar(200)

declare @operator char(2)

declare @sorttable varchar(200)

declare @sortname varchar(200)

declare @tempcount nvarchar(1000)

set @tempcount = 'select @rowstotal = count(*) from '+@tablenames+' where '+@filter+' '

execute sp_executesql @tempcount,n'@rowstotal int output',@rowstotal output

if @fields = ''

set @fields = '*'

if @filter = ''

set @filter = 'where 1=1'

else

set @filter = 'where ' +  @filter

if @group <>''

set @group = 'group by ' + @group

if @order <> ''

begin

declare @pos1 int, @pos2 int

set @order = replace(replace(@order, ' asc', ' asc'), ' desc', ' desc')

if charindex(' desc', @order) > 0

if charindex(' asc', @order) > 0

begin

if charindex(' desc', @order) < charindex(' asc', @order)

set @operator = '<='

else

set @operator = '>='

endelse

set @operator = '<='

else

set @operator = '>='

set @sortcolumn = replace(replace(replace(@order, ' asc', ''), ' desc', ''), ' ', '')

set @pos1 = charindex(',', @sortcolumn)

if @pos1 > 0

set @sortcolumn = substring(@sortcolumn, 1, @pos1-1)

set @pos2 = charindex('.', @sortcolumn)

if @pos2 > 0

begin

set @sorttable = substring(@sortcolumn, 1, @pos2-1)

if @pos1 > 0

set @sortname = substring(@sortcolumn, @pos2+1, @pos1-@pos2-1)

else

set @sortname = substring(@sortcolumn, @pos2+1, len(@sortcolumn)-@pos2)

endelse

begin

set @sorttable = @tablenames

set @sortname = @sortcolumn

endend

else

begin

set @sortcolumn = @primarykey

set @sorttable = @tablenames

set @sortname = @sortcolumn

set @order = @sortcolumn

set @operator = '>='

enddeclare @type varchar(50)

declare @prec int

select @type=t.name, @prec=c.prec

from sysobjects o

join syscolumns c on o.id=c.id

join systypes t on c.xusertype=t.xusertype

where o.name = @sorttable and c.name = @sortname

if charindex('char', @type) > 0

set @type = @type + '(' + cast(@prec as varchar) + ')'

declare @toprows int

set @toprows = @pagesize * @currentpage + 1

print @toprows

print @operator

exec('

declare @sortcolumnbegin ' + @type + '

set rowcount ' + @toprows + '

select @sortcolumnbegin=' + @sortcolumn + ' from  ' + @tablenames + ' ' + @filter + ' ' + @group + ' order by ' + @order + '

set rowcount ' + @pagesize + '

select ' + @fields + ' from  ' + @tablenames + ' ' + @filter  + ' and ' + @sortcolumn + '' + @operator + '@sortcolumnbegin ' + @group + ' order by ' + @order + '   

')   

endasp codes

<%

dim currentpage,maxperpage,totalput,mycount,strfile

if not isempty(request.querystring("page")) then

currentpage=cint(request.querystring("page"))

else

currentpage=1

end if

call beginconn()

maxperpage=1

set rs = .execute

end with

if rs.state <> 0 then '取到資料,得到儲存過程輸出值

rs.close '注意:若要取得引數值,需先關閉記錄集物件

rscount = mycomm(0)

'pagecount = mycomm(1)

rs.open

set mycomm = nothing

end if

totalput = rscount

if (currentpage-1)*maxperpage>totalput then

if (totalput mod maxperpage)=0 then

currentpage= totalput / maxperpage

else

currentpage= totalput / maxperpage + 1

end if

end if

if totalput mod maxperpage=0 then

mycount= totalput / maxperpage

else

mycount= totalput / maxperpage+1

end if

if not rs.eof then

strfile = "?ordertype="&ordertype&"&"

do while not rs.eof

%> 

200 島嶼數量

複雜度分析 時間複雜度 o m n 其中 m 和 n 分別為行數和列數。空間複雜度 最壞情況下為 o m n 此時整個網格均為陸地,深度優先搜尋的深度達到m n。class solution int numislands vector grid int cnt 0 for int i 0 i gri...

200 島嶼數量

leetcode 200.島嶼數量 島嶼另一種型別 求周長 leetcoed 463.島嶼的周長 廣度優先遍歷 bfs 深度優先遍歷 dfs 2.1 dfs 就是遇到乙個 1 遞迴下去繼續找 1 四周沒有 1 之後,逐層返回到上一層找四周剩餘的 1 本題不需要回溯 直接把 訪問過的標記即可 廣度優先...

200 島嶼數量

給你乙個由 1 陸地 和 0 水 組成的的二維網格,請你計算網格中島嶼的數量。島嶼總是被水包圍,並且每座島嶼只能由水平方向和 或豎直方向上相鄰的陸地連線形成。此外,你可以假設該網格的四條邊均被水包圍。示例 1 輸入 grid 1 1 1 1 0 1 1 0 1 0 1 1 0 0 0 0 0 0 0...