谁能帮我写成好这个分页的存储过程 50jlingang]

发布时间:2016-12-10 16:48:51 编辑:www.fx114.net 分享查询网我要评论
本篇文章主要介绍了"谁能帮我写成好这个分页的存储过程 50jlingang]",主要涉及到谁能帮我写成好这个分页的存储过程 50jlingang]方面的内容,对于谁能帮我写成好这个分页的存储过程 50jlingang]感兴趣的同学可以参考一下。

CREATE PROCEDURE pagination2 ( @SQL nVARCHAR(4000), --不带排序语句的SQL语句 @Page int, --当前页数码 @RecsPerPage int, --每页容纳的记录数 @ID VARCHAR(255), --需要排序的不重复的ID号 @Sort VARCHAR(255) --排序字段及规则 @RecorderCount INT,          --记录总数 0:会返回总记录 @TotalCount INT OUTPUT,      --记返回总记录 @TotalPageCount INT OUTPUT   --返回总页数 ) AS DECLARE @Str nVARCHAR(4000) SET @Str=''SELECT TOP'' +CAST(@RecsPerPage AS VARCHAR(20))+ '' * FROM ([email protected]+'') T WHERE T. '' [email protected]+''NOT IN (SELECT TOP''+CAST((@RecsPerPage*(@Page-1)) AS VARCHAR(20))+'' [email protected]+'' FROM ([email protected]+'') T9 ORDER BY [email protected]+'') ORDER BY [email protected] PRINT @Str EXEC sp_ExecuteSql @Str GO 我现在想写一专用的分页存储过程,写到一半后面的不知道怎么写了 请大家帮忙写一下.看还有什么地方还要优化.

--2005 Create  procedure [dbo].[Pagination]( @pagesize int, -- 页大小 @pageindex int, -- 当前页 @identity varchar(100), -- 唯一列 @cells varchar(1000)='*', -- 显示列 @tables varchar(1000), -- 表名称 @condition varchar(2000)=NULL, -- 查询条件 @top int = -1, --  @orderby varchar(200)=NULL -- 排序 desc ) as set nocount on declare @rowcount int; declare @SQL nvarchar(4000); set @SQL = N'select @rowcount = count(0) from ' + @tables + ' where 1=1 ';     if(@condition IS NOT NULL) set @SQL = @SQL + @condition; exec sp_executesql @SQL,[email protected] int output',@rowcount output; if(@top != -1 and @rowcount > @top) set @rowcount = @top;     set @SQL = N'declare @___lb int;';     set @SQL = @SQL + N'declare @___ub int;';     set @SQL = @SQL + N'set @___lb=(@pageindex-1)[email protected];';     set @SQL = @SQL + N'set @___ub=@[email protected];';     set @SQL = @SQL + N'set ROWCOUNT @___ub;'; set @SQL = @SQL + N'with ___t as (select *'; if(@orderby is not null and @orderby != '') set @SQL = @SQL + N',row_number() over(order by ' + @orderby + ',' + @identity + ' asc) as ___p from ('; else set @SQL = @SQL + N',row_number() over(order by ' + @identity + ' asc) as ___p from ('; if(@top != -1) set @SQL = @SQL + N'select top ' + cast(@top as nvarchar(10)) + ' '; else set @SQL = @SQL + N'select '; if(@cells IS NOT NULL) set @SQL = @SQL + @cells; else set @SQL = @SQL + N'*'; set @SQL = @SQL + ' from ' + @tables + ' where 1=1'; if(@condition IS NOT NULL and @condition != '') set @SQL = @SQL + ' ' + @condition; set @SQL = @SQL + ') as ___q) select * from ___t where ___p>@___lb and ___p<=@___ub;'; exec sp_executesql @SQL,[email protected] int,@pageindex int',@pagesize = @pagesize,@pageindex = @pageindex; return @rowcount; set nocount off

楼上的就是拼一条sql语句,我已经给出了2005通用的分页存储过程

如果你用的是sql server 2005的话,直接可以用 select row_number() over  (order by booking_no) as ID from TableName where id between pageSize*个数+a and pageSize*个数+b

推荐我的分页: http://www.dmblogs.com/nzBlog/article.asp?id=25

这个是 30到40 的 搂住自己类是模拟吧  select top 10*from  (select top 40 *from Table order by DESC @Sort )  order by @Sort

上一篇:SSIS,执行“传输 SQL Server 对象任务”时出错!!帮忙解决!!谢了!! 30分,无满意结帖,结帖人Cool_Sword]
下一篇:关于script componet 30分,无满意结帖,结帖人lu632]

相关文章

相关评论