• 分页存储过程


    View Code
    ------------------------------------
     --用途:支持任意排序的分页存储过程 
     --说明:
     ------------------------------------
     
     CREATE PROCEDURE [dbo].[UP_GetRecordByPageOrder]
     
     @tblName varchar(255),   -- 表名 
     @fldName varchar(255),   -- 显示字段名 
     @OrderfldName varchar(255), -- 排序字段名 
     @StatfldName varchar(255), -- 统计字段名 
     @PageSize int = 10,   -- 页尺寸 
     @PageIndex int = 1,   -- 页码 
     @IsReCount bit = 0,   -- 返回记录总数, 非 0 值则返回 
     @OrderType bit = 0,   -- 设置排序类型, 非 0 值则降序 
     @strWhere varchar(1000) = '' -- 查询条件 (注意: 不要加 where) 
     AS
     
     declare @strSQL varchar(6000) -- 主语句 
     declare @strTmp varchar(100)   -- 临时变量(查询条件过长时可能会出错,可修改100为1000)
     declare @strOrder varchar(400) -- 排序类型
     
     if @OrderType != 0 
     begin 
     set @strTmp = '<(select min' 
     set @strOrder = ' order by [' + @OrderfldName +'] desc' 
     end 
     else 
     begin 
     set @strTmp = '>(select max' 
     set @strOrder = ' order by [' + @OrderfldName +'] asc' 
     end
     
     set @strSQL = 'select top ' + str(@PageSize) + ' ' + @fldName + ' from [' 
     + @tblName + '] where [' + @OrderfldName + ']' + @strTmp + '([' 
     + @OrderfldName + ']) from (select top ' + str((@PageIndex-1)*@PageSize) + ' [' 
     + @OrderfldName + '] from [' + @tblName + ']' + @strOrder + ') as tblTmp)' 
     + @strOrder
     
     if @strWhere != '' 
     set @strSQL = 'select top ' + str(@PageSize) + ' ' + @fldName + ' from [' 
     + @tblName + '] where [' + @OrderfldName + ']' + @strTmp + '([' 
     + @OrderfldName + ']) from (select top ' + str((@PageIndex-1)*@PageSize) + ' [' 
     + @OrderfldName + '] from [' + @tblName + '] where ' + @strWhere + ' ' 
     + @strOrder + ') as tblTmp) and ' + @strWhere + ' ' + @strOrder
     
     if @PageIndex = 1 
     begin 
     set @strTmp = '' 
     if @strWhere != '' 
     set @strTmp = ' where ' + @strWhere
     
     set @strSQL = 'select top ' + str(@PageSize) + ' ' + @fldName + ' from [' 
     + @tblName + ']' + @strTmp + ' ' + @strOrder 
     end
     
     
     if @IsReCount != 0 
     set @strSQL = @strSQL+' select count(1) as Total from [' + @tblName + ']'
     
     if @strWhere!=''
     set @strSQL = @strSQL+' where ' + @strWhere
     exec (@strSQL)
     
      
     
     
     ------------------------------------
     --用途:分页存储过程(对有主键的表效率极高) 
     --说明:
     ------------------------------------
     
     CREATE PROCEDURE [dbo].[UP_GetRecordByPage]
         @tblName      varchar(255),       -- 表名
         @fldName      varchar(255),       -- 主键字段名
         @PageSize     int = 10,           -- 页尺寸
         @PageIndex    int = 1,            -- 页码
         @IsReCount    bit = 0,            -- 返回记录总数, 非 0 值则返回
         @OrderType    bit = 0,            -- 设置排序类型, 非 0 值则降序
         @strWhere     varchar(1000) = '' -- 查询条件 (注意: 不要加 where)
     AS
     
     declare @strSQL   varchar(6000)       -- 主语句
     declare @strTmp   varchar(100)        -- 临时变量(查询条件过长时可能会出错,可修改100为1000)
     declare @strOrder varchar(400)        -- 排序类型
     
     if @OrderType != 0
     begin
         set @strTmp = '<(select min'
         set @strOrder = ' order by [' + @fldName +'] desc'
     end
     else
     begin
         set @strTmp = '>(select max'
         set @strOrder = ' order by [' + @fldName +'] asc'
     end
     
     set @strSQL = 'select top ' + str(@PageSize) + ' * from ['
         + @tblName + '] where [' + @fldName + ']' + @strTmp + '(['
         + @fldName + ']) from (select top ' + str((@PageIndex-1)*@PageSize) + ' ['
         + @fldName + '] from [' + @tblName + ']' + @strOrder + ') as tblTmp)'
         + @strOrder
     
     if @strWhere != ''
         set @strSQL = 'select top ' + str(@PageSize) + ' * from ['
             + @tblName + '] where [' + @fldName + ']' + @strTmp + '(['
             + @fldName + ']) from (select top ' + str((@PageIndex-1)*@PageSize) + ' ['
             + @fldName + '] from [' + @tblName + '] where ' + @strWhere + ' '
             + @strOrder + ') as tblTmp) and ' + @strWhere + ' ' + @strOrder
     
     if @PageIndex = 1
     begin
         set @strTmp =''
         if @strWhere != ''
             set @strTmp = ' where ' + @strWhere
     
         set @strSQL = 'select top ' + str(@PageSize) + ' * from ['
             + @tblName + ']' + @strTmp + ' ' + @strOrder
     end
     
     if @IsReCount != 0
         set @strSQL = 'select count(*) as Total from [' + @tblName + ']'+' where ' + @strWhere
     
     exec (@strSQL)
  • 相关阅读:
    hdu1593(find a way to escape)
    每日学习小记 11/02
    将博客搬至CSDN
    浏览器渲染机制
    适配器模式 The Adapter Pattern
    工厂方法模式 The Factory Method Pattern
    观察者模式 The Observer Pattern
    模板方法模式 The Template Method Pattern
    命令模式 The Command Pattern
    迭代器模式 The Iterator Pattern
  • 原文地址:https://www.cnblogs.com/TNSSTAR/p/2653865.html
Copyright © 2020-2023  润新知