首页 > 代码库 > sqlserver2000 存储过程分页 -只有一张表

sqlserver2000 存储过程分页 -只有一张表

从网上找的,采用了游标进行了存储过程分页,但是有一个问题,就是有两张表,第一张表是空的,而第二张表才是真正的有数据的。

现在修改了该存储过程,使其只生成一张表。

 

create procedure [dbo].[Pr_QueryByPage]
@sqlstr nvarchar(4000), --查询sql
@currentpage int, --第页记录条数
@pagesize int, --每页显示记录
@tablename varchar(100) --表名
as
set nocount on
declare @P1 int, --P1是游标的ID
@rowcount int, --
@sql varchar(100) --动态sql语句
--> 笨方法,用临时表将空结果集接收了
set @sql = ‘select top 0 * into ##tmpTable from ‘+@tablename
exec(@sql)
insert into ##tmpTable exec sp_cursoropen @P1 output,@sqlstr,@scrollopt=1,@ccopt=1,@rowcount=@rowcount output
--select ceiling(1.0*@rowcount/@pagesize) as TotalPage,@rowcount as [RowCount]
set @currentpage=(@currentpage-1)*@pagesize+1
exec sp_cursorfetch @P1,16,@currentpage,@pagesize
exec sp_cursorclose @P1
Drop Table ##tmpTable
set nocount off
GO

 

传入4个参数,sql语句,第几页,每页多少条数据,表名。

在查询分析器中可以使用以下sql语句:

exec Pr_QueryByPage ‘select * from table1  order by id‘,1,10,‘table1‘

 

c#调用:

//执行分页的存储过程,注意:status=‘‘0‘‘是前后各两个单引号,不是双引号。
string sql = "exec Pr_QueryByPage ‘select * from table1 a where status=‘‘0‘‘ ";
if ( baodanhao != "")
{
sql += " and a.baodanhao like ‘‘%" + baodanhao + "%‘‘";
}
sql += " order by id‘,"+page+","+pagesize+",‘table1‘ ";
oledbHelper = new OleDBHelper();
return oledbHelper.ExecuteQueryFy(sql);

sqlserver2000 存储过程分页 -只有一张表