[注册] [登录] English 日本語 简体中文

您好,欢迎来到酷易 首页 | 新闻中心 | 产品中心 | 方案展示| trac | 自助选机 | 标签云 | 列车时刻 | 留言反馈 | 关于酷易

当前位置:首页-->新闻中心-->技术讨论-->MSSQL2005分页方案

MSSQL2005分页方案

来源:酷易网络 作者:kuuy 时间:2009-01-20 Tag:mssql 分页 2005 递归  点击:743
  (0 votes)

文章地址:http://www.codeproject.com/KB/database/kuuy_P_CustomPaging.aspx
 
方案一:使用RowNum函数
 ALTER PROCEDURE [dbo].[kuuy_P_CustomPaging]
 @getFields NVARCHAR(500)='', --返回字段
 @tblName NVARCHAR(255)='', --表名
 @strWhere NVARCHAR(1500)='', --查询条件
 @strOrder NVARCHAR(1000)='',--排序字段
 @IsCount BIT=0, --记录数,非零返回记录数
 @PageSize INT=10, --页尺寸
 @CurrentPage INT=1, --当前页码
 @ItemCount INT=0 OUTPUT
AS
 DECLARE @strSQL NVARCHAR(4000) --主语句
 DEClARE @strTmp NVARCHAR(2000) --临时变量
 DECLARE @ItemCountValue INT
 DECLARE @strCount NVARCHAR(4000) --查总的记录数
 
 IF (@strOrder !='')
  SET @strOrder = ' ORDER BY '+@strOrder
 ELSE
  SET @strOrder = ' ORDER BY ID'
 IF(@strWhere !='')
  SET @strWhere =' WHERE '+@strWhere
 
    SET @strTmp='WITH T_Orders AS(SELECT ROW_NUMBER() OVER('+@strOrder+') AS RowNum,'+@getFields+' FROM '+@tblName+@strWhere+')'
 IF (@IsCount!=0)
  SET @strCount = ' SET @ItemCount=(SELECT COUNT(*) FROM '+@tblName+@strWhere+')'
 ELSE
  SET @strCount =''
 
 SET @strSQL = @strTmp+'SELECT TOP ('+str(@PageSize)+') RowNum,'+@getFields+' '+
        'FROM T_Orders '+
        'WHERE RowNum BETWEEN '+str((@CurrentPage-1)*@PageSize+1)+' AND '+ str(@CurrentPage*@PageSize)+@strCount
       
 EXEC sp_executesql @strSQL,N'@ItemCount INT OUTPUT',@ItemCount=@ItemCountValue OUTPUT
 SET @ItemCount = @ItemCountValue
 RETURN
方案二:不使用ROWNUM()
ALTER PROCEDURE [dbo].[kuuy_P_CustomPaging_WithoutRowNum]
    @getFields NVARCHAR(500)='', --Columns_Name
    @tblName NVARCHAR(255)='', --Table_Name
    @strWhere NVARCHAR(1500)='', --Conditons
    @strOrder NVARCHAR(1000)='',--Order
    @keyName NVARCHAR(50)='ID', --KeyName
    @oprateKeyValue VARCHAR(2)='>', --Oprate
    @funKeyValue NVARCHAR(100)='MAX(ID)', --Identity The Order Key value
    @IsCount BIT=0, --Identity Whether Return The Total Results
    @PageSize INT=10, --RowsCount You Want Fetch Onece
    @CurrentPage INT=1, --CurrentPage
    @ItemCount INT=0 OUTPUT
AS
    DECLARE @strSQL NVARCHAR(4000) --Dynamic SQL string
    DEClARE @strTmp NVARCHAR(2000) --TEMP SQL String
    DECLARE @ItemCountValue INT
    DECLARE @strCount NVARCHAR(4000) --Total Records
   
    IF (@strOrder <> '')
        SET @strOrder = ' ORDER BY '+@strOrder
    ELSE
        SET @strOrder = ' ORDER BY ID'
    IF(@strWhere <> '')
    BEGIN
        IF(@CurrentPage > 1)
            SET @strWhere =' AND '+@strWhere
        ELSE
            SET @strWhere =' WHERE '+@strWhere
    END
      
    IF (@IsCount <> 0)
        SET @strCount = ' SET @ItemCount=(SELECT COUNT(*) FROM '+@tblName+@strWhere+')'
    ELSE
        SET @strCount =''
       
    IF(@CurrentPage > 1)
    BEGIN
           SET @strTmp='WITH T_Orders AS(SELECT TOP('+str(@CurrentPage*@PageSize)+')'+@keyName+' FROM '+@tblName+@strWhere+@strOrder+')'
           SET @strSQL = @strTmp+'SELECT TOP ('+str(@PageSize)+')'+@getFields+' '+
                          'FROM '+@tblName + ' '+
                          'WHERE '+ @keyName + @oprateKeyValue +
                          '(SELECT ' + @funKeyValue + ' FROM (SELECT TOP(' + str((@CurrentPage-1)*@PageSize) + ')* FROM T_Orders) AS T)'+
                        @strWhere+@strOrder
    END
       ELSE
           SET @strSQL = 'SELECT TOP('+str(@PageSize)+')'+@getFields+' FROM '+@tblName+@strWhere+@strOrder
                         
    EXEC sp_executesql @strSQL,N'@ItemCount INT OUTPUT',@ItemCount=@ItemCountValue OUTPUT
    PRINT @strSQL
    SET @ItemCount = @ItemCountValue
    RETURN

网友评论

共(0)条评论
  • 评论加载中……
 匿名登录   校验码:   
请输入验证码!
用户名:  密码:

新闻分类

更多>>
  • 产品发布
  • 酷易CMS
  • 常见问题
  • 技术讨论
  • 网络文摘
  • 研发日志

最新文章

更多>>
  • apache环境测试
  • trac+svn+apache环境配置…
  • kss准备开源
  • ffrz.com配置完成
  • JQuery完成内容列表GetHi…
  • JS - jQuery 中 each()方…

热点文章

更多>>
  • JS通过JSON和SOAP调用Web…
  • MSSQL2005分页方案
  • MSSQL2000分页方案
  • 酷易研发日志之新闻系统
  • 能够告诉一些道理的九个故…
  • 邮件没有收到
  • JS文件上传增加上传限制
  • 如何网上投诉中国电信

| 联系我们 | 关于我们 | 本站荣誉 |  本站成员  | 网站推广 | 交换链接 | 常见问题 | 留言反馈  |

Copyrights©kuuy.com(2007-2010)  All Rights Reserved

版权所有 酷易网络    冀ICP备05003600号