zoukankan      html  css  js  c++  java
  • MS数据库分页

    今天在公司的项目中发现了个一个比较通用的存储过程,就此共享

    CREATE PROCEDURE [dbo].[CustomPaging]
     @getFields NVARCHAR(500)='', --返回字段
     @tblName NVARCHAR(255)='', --表名
     @strWhere NVARCHAR(1500)='', --查询条件
     @strOrder NVARCHAR(1000)='',--排序字段
     @PageSize INT=10, --页尺寸
     @CurrentPage INT=1 --当前页码
    AS
       
     DECLARE @strSQL NVARCHAR(4000) --主语句
     DEClARE @strTmp NVARCHAR(2000) --临时变量
     DECLARE @sRowNum INT --始记录行
     DEClARE @eRowNum INT --未记录行
     DECLARE @strCount NVARCHAR(4000) --查总的记录数
     
     DECLARE @Recordstr nvarchar(50)--记录条数
     DECLARE @RecordCount int
     DECLARE @CountPage int--总页数
     
     --设置查找
     IF @strWhere != ''
      SET @strWhere = ' WHERE ' + @strWhere
        --输出总记录
     SET @strSQL='set @RecordCount=(select count(*) from ' + @tblName + @strWhere+')'   
     EXEC sp_executesql @strSQL,N'@RecordCount int output',@RecordCount output
     

         SET @Recordstr= @RecordCount
     
     --取总页数
     IF @Recordstr%@PageSize=0 and @Recordstr>0
        SET @CountPage=@Recordstr/@PageSize
     ELSE
        SET @CountPage=@Recordstr/@PageSize+1
     
     --判断当前页是否超出范围 
     IF @CountPage<@CurrentPage
        SET @CurrentPage=@CountPage  --取当前页
     
     --设置页起始记录行值
     SET @sRowNum=(@CurrentPage-1)*@PageSize+1
     --设置页未记录行值
     SET @eRowNum=@sRowNum+@PageSize-1
     
     --设置排序
     IF (@strOrder !='')
      SET @strOrder = ' ORDER BY '+@strOrder
     ELSE
      SET @strOrder = ' ORDER BY ID'
     --设置总记录数 
     SET @strCount = 'SELECT '+@Recordstr+' AS Total '
     --设置总临时表
     SET @strTmp = '(SELECT ROW_NUMBER() OVER( '+@strOrder+' ) AS RowNum,'+ @getFields +
                   ' FROM '+@tblName+ @strWhere +') AS t'
     --设置分页表
     --IF (@CurrentPage = 1)
      --SET @strSQL = 'SELECT TOP ('+ltrim(str(@PageSize))+') ROW_NUMBER() OVER('+@strOrder+' ) AS RowNum,'+@getFields+
         --  ' FROM '+ @tblName + @strWhere + @strOrder
      --SET @strSQL = 'SELECT TOP ('+ltrim(str(@PageSize))+') * from '+@strTmp
     --ELSE
      SET @strSQL =  'SELECT TOP ('+ltrim(str(@PageSize))+') *  FROM '+ @strTmp +
          ' WHERE RowNum BETWEEN '+ltrim(str(@sRowNum))+' AND '+ltrim(str(@eRowNum))+' order by rownum asc'
     --取得列表
     EXEC (@strSQL)
     --取得总记录数
     EXEC (@strCount)

     RETURN

    此处有个函数挺有用得 就是产生序号  row_number over(order by yourfiled)

    有表USERINFO   有column   name varchar(20)

    可以如此  select row_number over(order by name) as ‘序号’,* from userInfo

    显示:

    序号   name

    1        zhang

    2        wang

    3        lidddd

  • 相关阅读:
    POJ 3261 Milk Patterns (求可重叠的k次最长重复子串)
    UVaLive 5031 Graph and Queries (Treap)
    Uva 11996 Jewel Magic (Splay)
    HYSBZ
    POJ 3580 SuperMemo (Splay 区间更新、翻转、循环右移,插入,删除,查询)
    HDU 1890 Robotic Sort (Splay 区间翻转)
    【转】ACM中java的使用
    HDU 4267 A Simple Problem with Integers (树状数组)
    POJ 1195 Mobile phones (二维树状数组)
    HDU 4417 Super Mario (树状数组/线段树)
  • 原文地址:https://www.cnblogs.com/zhangqifeng/p/1459397.html
Copyright © 2011-2022 走看看