sql server分页使用存储过程要更高效些
----------------------------------------------------------------------------------------------------------------------------------- 【程序编程相关:使用ADO.NET访问数据库】
下面这个存储过程是从sql区找到的 【推荐阅读:承载.NET公共语言运行库】@querystr varchar(8000), --表名.视图名.查询语句 【扩展信息:在.NET中开发组件】create proc p_show@pagesize int=10, --每页的大小(行数)@pagecurrent int=1, --要显示的页@fdshow varchar (8000)=, --要显示的字段列表,如果查询结果有标识字段,需要指定此值,且不包含标识字段@fdorder nvarchar (3000)= --排序字段列表asdeclare @fdname nvarchar(550) --表中的主键或表.临时表中的标识列名 ,@id1 varchar(80),@id2 varchar(80) --开始与结束的记录号 ,@obj_id int --对象id--表中有复合主键的处理declare @strfd nvarchar(4000) --复合主键列表 ,@strjoin varchar(8000) --连接字段 ,@strwhere nvarchar(4000) --查询条件 select @obj_id=object_id(@querystr) ,@fdshow=case isnull(@fdshow,) when then * else +@fdshow end ,@fdorder=case isnull(@fdorder,) when then else order by +@fdorder end ,@querystr=case when @obj_id is not null then +@querystr else (+@querystr+) a end--如果显示第一页,可以直接用top来完成
if @pagecurrent=1 begin select @id1=cast(@pagesize as varchar(50)) exec(select top +@id1+@fdshow+ from +@querystr+@fdorder) returnend--如果是表,则检查表中是否有标识更或主键
if @obj_id is not null and objectproperty(@obj_id,istable)=1begin select @id1=cast(@pagesize as varchar(50)) ,@id2=cast((@pagecurrent-1)*@pagesize as varchar(50))... 下一页