TsoLong Blog

http://www.tsolong.com/

导航

sql2000 分页存储过程同时返回记录总数

create procedure DataPage
  @TableName nvarchar(100),    --数据库表名
  @SelectColumnName nvarchar(1000) = '' ,  --查询的列名
  @SelectWhere nvarchar(1500) = '',  --查询的条件
  @OrderColumnName nvarchar(255) = '',  --排序的字段 (不能为空)
  @OrderType bit = 0,      --排序类型 (0:升序 非0:降序)
  @PageSize int = 10,      --每页数据条数
  @PageIndex int = 1,      --当前页码
  @RecordTotal int output     --记录总数
as
set nocount on
declare @StrTotalSQL nvarchar(4000)
declare @StrSQL nvarchar(4000)
declare @StrTemp nvarchar(1000)
declare @StrOrder nvarchar(1000)
  
  --记录总数
  if @SelectWhere != ''
    set @StrTotalSQL = 'select @RecordTotal=count(*) from ' + @TableName + ' where ' + @SelectWhere
  else
    set @StrTotalSQL = 'select @RecordTotal=count(*) from ' + @TableName
  

  if @OrderType != 0
    begin
      set @StrTemp = '<(select min'
      set @StrOrder = 'order by ' + @OrderColumnName + ' desc'
    end
  else
    begin
      set @StrTemp = '>(select max'
      set @StrOrder = 'order by ' + @OrderColumnName + ' asc'
    end

  if @PageIndex = 1
    begin
      if @SelectWhere != ''
        set @StrSQL = 'select top ' + str(@PageSize) + ' ' + @SelectColumnName + ' from ' + @TableName + ' where ' + @SelectWhere + ' ' + @StrOrder
      else
        set @StrSQL = 'select top ' + str(@PageSize) + ' ' + @SelectColumnName + ' from ' + @TableName + ' ' + @StrOrder
  
    end
  else
    begin
      set @OrderColumnName = substring(@OrderColumnName,charindex('.',@OrderColumnName)+1,len(@OrderColumnName) - charindex('.',@OrderColumnName))
      
      if @SelectWhere = ''
        set @StrSQL = 'select top ' + str(@PageSize) + ' ' + @SelectColumnName + ' from ' 
        + @TableName + ' where ' + @OrderColumnName + '' + @StrTemp 
        + '(' + @OrderColumnName + ') from (select top ' + str((@PageIndex - 1) * @PageSize) 
        + ' ' + @OrderColumnName + ' from ' + @TableName + ' ' + @StrOrder + ') as TempColumn) ' 
        + @StrOrder
      else
        set @StrSQL = 'select top ' + str(@PageSize) + ' ' + @SelectColumnName + ' from ' 
        + @TableName + ' where ' + @OrderColumnName + '' + @StrTemp 
        + '(' + @OrderColumnName + ') from (select top ' + str((@PageIndex - 1) * @PageSize) 
        + ' ' + @OrderColumnName + ' from ' + @TableName + ' where ' + @SelectWhere + ' ' + @StrOrder + ') as TempColumn) and ' 
        + @SelectWhere + ' ' + @StrOrder
    end

execute sp_executesql @StrTotalSQL,N'@RecordTotal int output',@RecordTotal output
execute (@StrSQL)

GO

<< javascript+Ajax分页条控件一个很好的圆角库 >>

发表评论:

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。

最近发表

Copyright © 2008-2010 TsoLong Blog All Rights Reserved.   沪ICP备08106933号