DDR爱好者之家 Design By 杰米
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("@strFields",200,1,2000,strFields)
Cmd.Parameters.Append Cmd.CreateParameter("@strTable",200,1,200,strTable)
Cmd.Parameters.Append Cmd.CreateParameter("@strWhere",200,1,800,strWhere)
Cmd.Parameters.Append Cmd.CreateParameter("@strOrderType",4,1,4,strOrderType)
Cmd.Parameters.Append Cmd.CreateParameter("@strKeyField",200,1,50,strKeyField)
SET RS=Cmd.Execute()
IF RecCount<1 THEN
    Response.Write("没有记录")
ELSE
    GetRecord=RS.GetRows(IntPageSize)
    For i=0 To Ubound(GetRecord,2)
        Response.Write(GetRecord(0,i),GetRecord(1,i),GetRecord(2,i))    '...输出内容
    NEXT
    GetRecord=Null
END IF
SET RS=NOTHING

有用的朋友请自己慢慢调试吧,总记录是用ASP来取的,存储在SESSION里边,如果每次都统计一次总记录,将会非常费时,当然,如果你想在存储过程里来取总记录和总页数然后返回也是可以的,下边是代码:
--获取记录总数--
SET @tmpSQL='SELECT @getRecordCounts=COUNT('+@strKeyField+') FROM '+@strTable+@tmpWhere
EXEC sp_executesql @tmpSQL,N'@getRecordCounts int output',@getRecordCounts OUTPUT

--获取总页数--
SET @tempFolatNumber=@getRecordCounts%@IntPageSize
IF @getRecordCounts<=@IntPageSize
    SET @getPageCounts=1
ELSE
BEGIN
    IF @tempFolatNumber != 0
        SET @getPageCounts=(@getRecordCounts/@IntPageSize)+1
    ELSE
        SET @getPageCounts=(@getRecordCounts/@IntPageSize)
END

别忘了返回定义参数:
@getRecordCounts int output,--返回总记录
@getPageCounts int output--返回总页数
DDR爱好者之家 Design By 杰米
广告合作:本站广告合作请联系QQ:858582 申请时备注:广告合作(否则不回)
免责声明:本站资源来自互联网收集,仅供用于学习和交流,请遵循相关法律法规,本站一切资源不代表本站立场,如有侵权、后门、不妥请联系本站删除!
DDR爱好者之家 Design By 杰米

《魔兽世界》大逃杀!60人新游玩模式《强袭风暴》3月21日上线

暴雪近日发布了《魔兽世界》10.2.6 更新内容,新游玩模式《强袭风暴》即将于3月21 日在亚服上线,届时玩家将前往阿拉希高地展开一场 60 人大逃杀对战。

艾泽拉斯的冒险者已经征服了艾泽拉斯的大地及遥远的彼岸。他们在对抗世界上最致命的敌人时展现出过人的手腕,并且成功阻止终结宇宙等级的威胁。当他们在为即将于《魔兽世界》资料片《地心之战》中来袭的萨拉塔斯势力做战斗准备时,他们还需要在熟悉的阿拉希高地面对一个全新的敌人──那就是彼此。在《巨龙崛起》10.2.6 更新的《强袭风暴》中,玩家将会进入一个全新的海盗主题大逃杀式限时活动,其中包含极高的风险和史诗级的奖励。

《强袭风暴》不是普通的战场,作为一个独立于主游戏之外的活动,玩家可以用大逃杀的风格来体验《魔兽世界》,不分职业、不分装备(除了你在赛局中捡到的),光是技巧和战略的强弱之分就能决定出谁才是能坚持到最后的赢家。本次活动将会开放单人和双人模式,玩家在加入海盗主题的预赛大厅区域前,可以从强袭风暴角色画面新增好友。游玩游戏将可以累计名望轨迹,《巨龙崛起》和《魔兽世界:巫妖王之怒 经典版》的玩家都可以获得奖励。