广

ASP编程

  • IOS开发
  • android开发
  • PHP编程
  • JavaScript
  • ASP.NET
  • ASP编程
  • JSP编程
  • Java编程
  • 易语言
  • Ruby编程
  • Perl编程
  • AJAX
  • 正则表达式
  • C语言
  • 编程开发

    以前写的一个分页存储过程,刚才不小心翻出来的

    2018-05-08 11:29:31 次阅读 稿源:互联网
    零七广告
    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--返回总页数

    零七网部分新闻及文章转载自互联网,供读者交流和学习,若有涉及作者版权等问题请及时与我们联系,以便更正、删除或按规定办理。感谢所有提供资讯的网站,欢迎各类媒体与零七网进行文章共享合作。

    零七广告
    零七广告
    零七广告
    零七广告