• 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

  • 相关阅读:
    如何获得RVA(相对虚地址)的值,从而得到一个程序的入口点
    Prism 问题总结一: 在模块中引用公用程序集出错
    Dapper 操作 ACCESS 数据库问题总结
    我国土地招拍挂制度
    [导入]棋味
    [导入]无语
    [导入]心灯
    [导入]寄托
    [导入]视频资源
    [导入]asp.net实现视频截图
  • 原文地址:https://www.cnblogs.com/zhangqifeng/p/1459397.html
Copyright © 2020-2023  润新知