日期:2014-05-19  浏览次数:20722 次

这个。。。送分了
对于过万条的记录怎么显示。
还用DATASET吗?

------解决方案--------------------
/*****************************************************
存储过程名称:pagination
功能:通用分页
返回值:无
参数:
1.表名(字符串,必要参数)
2.主键或者唯一约束字段(字符串,必要参数)
3.需不需要进行总数统计.(布尔类型,可选参数,默认为1。
1或者true是只统计总条数,不进行查询,
0或者false进行分页查询,不进行统计)
4.查询条件(字符串,可选参数,默认为无条件查询。
注意不要加where)
5.排序的字段名(字符串,可选参数,默认按照主键排序)
6.页码(整数,可选参数,默认第1页)
7.每页大小(整数,可选参数,默认每页10条记录)
8.排序类型(整数或布尔,可选参数,默认升序排序
1或true按降序排序
0或false按升序排列)
9.需要返回的列(字符串,可选参数,默认返回所有列)
*****************************************************/
CREATE PROCEDURE pagination
@TableName varchar(255), -- 表名
@PrimaryKey varchar(255),--主键或者唯一约束字段
@DoCount bit = 0, -- 需不需要进行总数统计.1是只统计总条数,不进行查询 0进行分页查询,不进行统计
@StrWhere varchar(1500) = ' ', -- 查询条件 (注意: 不要加 where)

@OrderField varchar(255)=@PrimaryKey, -- 排序的字段名,默认按照主键排序
@PageIndex int = 1, -- 页码
@PageSize int = 10, -- 页尺寸
@OrderType bit = 0 ,-- 设置排序类型, 非 0 值则降序
@StrGetFields varchar(1000) = '* '-- 需要返回的列
AS

declare @strSQL varchar(5000) -- 主语句
declare @strTmp varchar(110) -- 临时变量
declare @strOrder varchar(400) -- 排序类型

/********************************************
@DoCount传递过来的不是0,就执行总数统计
********************************************/
if @DoCount != 0
begin
if @StrWhere!= ' '
set @strSQL = 'select count(*) as Total from ' + @TableName + ' where '+@strWhere
else
set @strSQL = 'select count(*) as Total from ' + @TableName
end
/********************************************
以下的所有代码都是@DoCount为0的情况:
********************************************/
else
begin
/********************************************
确定是升序还是降序
********************************************/
if @OrderType != 0
begin
set @strTmp = ' <(select min '
set @strOrder = 'order by ' + @OrderField + ' desc '
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) + ' '+@StrGetFields+ ' from ' + @TableName + ' where ' + @strWhere + ' ' + @strOrder
else
set @strSQL = 'select top ' + str(@PageSize) + ' '+@strGetFields+ ' from '+ @TableName + ' '+ @strOrder
end
/**********************************************
不是第一页
***********************************************/
else
begin
if @strWhere= ' '
set @strSQL= 'select top '+str(@PageSize)+ ' '+@strGetFields+ ' from '+ @TableName + ' where '+@PrimaryKey+@strTmp+ '( '+@PrimaryKey+ ') as '+@PrimaryKey+ ' from (select top '+str((@PageIndex-1)*@PageSize)+ ' '+@PrimaryKey+ ' from '+@TableName+ ' '+@strOrder+ ') as T) '+@strOrder
else
set @strSQL= 'select top '+str(@PageSize)+ ' '+@strGetFields+ ' from '+ @TableName + ' where '+@PrimaryKey+@strTmp+ '( '+@PrimaryKey+ ') as '+@PrimaryKey+ ' from (select top '+str((@PageIndex-1)*@PageSize)+ ' '+@PrimaryKey+ ' from '+@TableName