鉴于大家对ASP十分关注,我们编辑小组在此为大家搜集整理了“以前写的一个分页存储过程,刚才不小心翻出来的”一文,供大家参考学习!
CREATE PROCEDURE GoalerPageSp
@IntPageSize int,
@IntCurrPage int,
@strFields nvarchar(2000),
@strTable varchar(200),
@strWhere varchar(800),
@strOrderType varchar(200),
@strKeyField varchar(50)
AS
SET NOCOUNT ON
DECLARE @tmpSQL nvarchar(4000)--存放动态SQL语句
DECLARE @tmpWhere varchar(800)
DECLARE @tmpAndWhere varchar(800)--用于第N(>1)页上边的
查询条件
DECLARE @tmpOrder varchar(200)
DECLARE @tmpD_X varchar(2)
DECLARE @tmpMin_MAX varchar(3)
--设置条件--
IF @strWhere IS NULL OR RTRIM(@strWhere)=''''
BEGIN --没有
查询条件
SET @tmpWhere=''''
SET @tmpAndWhere=''''
END
ELSE
BEGIN --有
查询条件
SET @tmpWhere='' WHERE ''+@strWhere
SET @tmpAndWhere='' AND ''+@strWhere
END
--设置排序--
IF @strOrderType != 0
BEGIN--倒序
SET @tmpD_X = ''<''
SET @tmpMin_MAX = ''MIN''
SET @tmpOrder='' ORDER BY '' +@strKeyField+ '' DESC''
END
ELSE
BEGIN
SET @tmpD_X = ''>''
SET @tmpMin_MAX = ''MAX''
SET @tmpOrder='' ORDER BY '' +@strKeyField+ '' ASC''
END
--SQL
查询--
IF @IntCurrPage=1
Set @tmpSQL=''SELECT TOP ''+CAST(@IntPageSize AS VARCHAR)+'' ''+@strFields+'' FROM ''+@strTable+'' ''+@tmpWhere+'' ''+@tmpOrder
ELSE
SET @tmpSQL=''SELECT TOP ''+CAST(@IntPageSize AS VARCHAR)+'' ''+@strFields+'' FROM ''+@strTable+'' WHERE (''+@strKeyField+'' ''+@tmpD_X+'' (SELECT ''+@tmpMin_MAX+''(''+@strKeyField+'') FROM (SELECT TOP ''+CAST(@IntPageSize*(@IntCurrPage-1) AS VARCHAR)+'' ''+@strKeyField+'' FROM ''+@strTable+'' ''+@tmpWhere+'' ''+@tmpOrder+'') AS T))''+@tmpAndWhere+'' ''+@tmpOrder
EXEC(@tmpSQL)
GO
调用方法:
IntPageSize=20
strTable=" [TableName] " ''数据表名称
strFields=" Field1,Field2,Field3,Field4 " ''需要读取的列名
strKeyField="Field1" ''主键:这里假设Field1为主键
strWhere="" ''条件:FieldA=''b''
strOrderType=1 ''排序方式:1为倒序,0为顺序
CurrPage=Request.QueryString("Page")
IF(CurrPage<>"" And Isnumeric(CurrPage))THEN
CurrPage=CLNG(CurrPage)
IF(CurrPage<1)THEN CurrPage=1
ELSE
CurrPage=1
END IF
IF strWhere<>"" THEN
tmpWhere=" WHERE "&strWhere
ELSE
tmpWhere=""
END IF
IF(SESSION("RecCount")<>"")THEN
IF(SESSION("strWhere")<>strWhere)THEN
RecCount=Conn.Execute("SELECT COUNT("&strKeyField&") FROM "&strTable&tmpWhere)(0)
SESSION("RecCount")=RecCount
SESSION("strWhere")=strWhere
ELSE
RecCount=SESSION("RecCount")
END IF
ELSE
RecCount=Conn.Execute("SELECT COUNT(*) FROM "&strTable&tmpWhere)(0)
SESSION("RecCount")=RecCount
SESSION("strWhere")=strWhere
END IF
IF(RecCount MOD IntPageSize <>0)THEN
IntPageCount=INT(RecCount/IntPageSize)+1
ELSE
IntPageCount=RecCount/IntPageSize
END IF
SET Cmd=Server.CreateObject("Adodb.Command")
Cmd.CommandType=4
SET Cmd.ActiveConnection=Conn
Cmd.CommandText="GoalerPageSp"
Cmd.Parameters.Append Cmd.CreateParameter("@IntPageSize",4,1,4,IntPageSize)
Cmd.Parameters.Append Cmd.CreateParameter("@IntCurrPage",4,1,4,CurrPage)
Cmd.Parameters.Append Cmd.CreateParameter("@st