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

    /*分页存储过程
    Descript:分页存储过程
    */
    Create  PROCEDURE ListPage
    (
    @tblName nvarchar(200),         ----要显示的表或多个表的连接
    @fldName nvarchar(200) = '*',         ----要显示的字段列表
    @pageSize int=10,                  ----每页显示的记录个数
    @page int=1,         ----要显示那一页的记录
    @pageCount int=1 output,         ----查询结果分页后的总页数
    @Counts int= 1 output,         ----查询到的记录数
    @fldSort nvarchar(100) = null, ----排序字段列表或条件
    @Sort bit= 0,         ----排序方法,0为升序,1为降序
    @strCondition nvarchar(200) = null,----查询条件,不需where
    @ID nvarchar(50)----主表的主键
    )
    AS
    SET NOCOUNT ON
    Declare @sqlTmp nvarchar(1000)----存放动态生成的SQL语句
    Declare @strTmp nvarchar(1000)----存放取得查询结果总数的查询语句
    Declare @strID nvarchar(1000)----存放取得查询开头或结尾ID的查询语句
    Declare @sqlSort nvarchar(200)----存放临时生成的排序条件
    Declare @intCounts int----要移动的记录数
    Declare @BeginID int----开始的ID
    Declare @EndID   int----结束的ID

    --------首先生成排序方法---------
    if @Sort=0--升序
    begin
      if not(@fldSort is null)
    set @sqlSort = ' Order by ' + @fldSort
      else
    set @sqlSort = ' Order by ' + @ID 
    end
    else--降序
    begin
    if not(@fldSort is null)
    set @sqlSort = ' Order by ' + @fldSort + ' DESC'
    else
    set @sqlSort = ' Order by ' + @ID + ' DESC '
    end


    --------生成查询语句--------
    --此处@strTmp为取得查询结果数量的语句
    if @strCondition is null--没有设置显示条件
    begin
    set @sqlTmp =  @fldName + ' From ' + @tblName
    set @strTmp = 'select @Counts=Count(' + @ID + ') FROM '+@tblName
    set @strID = ' From ' + @tblName
    end
    else
    begin
    set @sqlTmp = + @fldName + 'From ' + @tblName + ' where ' + @strCondition
    set @strTmp = 'select @Counts=Count(' + @ID + ') FROM '+@tblName + ' where ' + @strCondition
    set @strID = ' From ' + @tblName + ' where ' + @strCondition
    end

    ----取得查询结果总数量-----
    exec sp_executesql @strTmp,N'@Counts int out ',@Counts out

    --取得分页总数
    if @Counts <= @pageSize
    set @pageCount = 1
    else
    set @pageCount = (@Counts / @pageSize) + 1


    --计算要移动的记录数
    if @page = 1
    set @intCounts = @pageSize
    else
    begin
    set @intCounts = (@page-1) * @pageSize + 1
    end

    -----取得分页后此页的第一条记录的ID
    set @strID = 'select @BeginID=' + @ID + ' ' + @strID

    set @intCounts = @intCounts - @pageSize + 1
    set rowcount  @intCounts
    exec sp_executesql @strID,N'@BeginID int out ',@BeginID out

    -----取得分页后此页的最后一条记录的ID
    set @intCounts = @intCounts + @pageSize - 1
    print @intCounts
    set rowcount  @intCounts
    exec sp_executesql @strID,N'@BeginID int out ',@EndID out


    ------恢复系统设置-----
    set rowcount  0
    SET NOCOUNT OFF

    ------返回查询结果-----
    if @strCondition is null
    set @strTmp = 'select ' + @sqlTmp + ' where ' + @ID + ' between ' + str(@BeginID) + ' and ' + str(@EndID)
    else
    set @strTmp = 'select ' + @sqlTmp + ' where ' + @ID +' (between ' + str(@BeginID) + ' and ' + str(@EndID) + ')  and ' + @strCondition

    if not(@sqlSort is null)
    set @strTmp = @strTmp + @sqlSort
    exec sp_executesql @strTmp

  • 相关阅读:
    75. Sort Colors
    101. Symmetric Tree
    121. Best Time to Buy and Sell Stock
    136. Single Number
    104. Maximum Depth of Binary Tree
    70. Climbing Stairs
    64. Minimum Path Sum
    62. Unique Paths
    css知识点3
    css知识点2
  • 原文地址:https://www.cnblogs.com/SALIN/p/587312.html
Copyright © 2011-2022 走看看