zoukankan      html  css  js  c++  java
  • 通用分页存储过程

    CREATE PROCEDURE [dbo].[Shop_Common_Pager](
     @tblName   nvarchar(255),       -- 表名
     @Fields nvarchar(1000) = '*',  -- 需要返回的列
     @OrderField nvarchar(255)='',      -- 排序的字段名
     @PageSize   int = 10,          -- 页尺寸
     @PageIndex  int = 1,           -- 页码
     @doCount  bit = 0,   -- 返回记录总数, 非 0 值则返回
     @OrderType bit = 0,  -- 设置排序类型, 非 0 值则降序
     @strWhere  nvarchar(4000) = '',  -- 查询条件 (注意: 不要加 where)
     @sql nvarchar(4000)='' out
    )AS
    begin
     declare @strSQL   nvarchar(4000)       -- 主语句
     declare @strTmp   nvarchar(110)        -- 临时变量
     declare @strOrder nvarchar(400)        -- 排序类型
     if @doCount != 0
      begin
       if @strWhere !=''
        set @strSQL = 'select count(*) as Total from ' + @tblName + ' where ' + @strWhere
       else
        set @strSQL = 'select count(*) as Total from ' + @tblName + ''
      end 
     --以上代码的意思是如果@doCount传递过来的不是0,就执行总数统计。以下的所有代码都是@doCount为0的情况
     else
      begin
       if @OrderType != 0
        begin
         set @strTmp = '<(select min'
         set @strOrder = ' order by ' + @OrderField +' desc'
         --如果@OrderType不是0,就执行降序,这句很重要!
        end
       else
        begin
         set @strTmp = '>(select max'
         set @strOrder = ' order by ' + @OrderField +' asc'
        end
       if @PageIndex = 1
        begin
         if @strWhere != ''  
          set @strSQL = 'select top ' + str(@PageSize) +' '+@Fields+ '  from ' + @tblName + ' where ' + @strWhere + ' ' + @strOrder
         else
          set @strSQL = 'select top ' + str(@PageSize) +' '+@Fields+ '  from '+ @tblName + ' '+ @strOrder
        end
       else
        begin
         set @strSQL = 'select top ' + str(@PageSize) +' '+@Fields+ '  from '+ @tblName + ' where ' + @OrderField + ' ' + @strTmp + '('+ @OrderField + ') from (select top ' + str((@PageIndex-1)*@PageSize) + ' '+ @OrderField + ' from ' + @tblName + '' + @strOrder + ') as tblTmp)'+ @strOrder
         if @strWhere != ''
          set @strSQL = 'select top ' + str(@PageSize) +' '+@Fields+ '  from '+ @tblName + ' where ' + @OrderField + ' ' + @strTmp + '('+ @OrderField + ') from (select top ' + str((@PageIndex-1)*@PageSize) + ' '+ @OrderField + ' from ' + @tblName + ' where ' + @strWhere + ' '+ @strOrder + ') as tblTmp) and ' + @strWhere + ' ' + @strOrder
        end
      end
     set @sql=@strSql
     print @strSql
     exec (@strSQL)
    end
  • 相关阅读:
    Microsoft SQL Server 简介
    windows 系统再重启后,USB口失效(鼠标、U盘都无法识别)的过程及解决方法
    Linux 系统下文件夹与文件的读写可执行权限问题
    SQL中MINUS的用法与UNION的用法
    第七讲 自定义Realm实现授权
    第六讲 授权
    第五讲 散列算法(加密算法)
    第四讲 自定义Realm来实现身份认证
    第三讲JdbcRealm及Authentication Strategy
    第二讲shiro异常及执行流程
  • 原文地址:https://www.cnblogs.com/bqrm/p/1228533.html
Copyright © 2011-2022 走看看