分页存储过程:C#中常用的分页存储过程总绪来源: 发布时间:星期日, 2009年8月16日 浏览:9次 评论:0
表中主键必须为标识列
![]() ![]() ![]() 1.分页方案 ![]() 语句形式: SELECT TOP 10 * FROM TestTable WHERE (ID NOT IN (SELECT TOP 20 id FROM TestTable ORDER BY id)) ORDER BY ID SELECT TOP 页大小 * FROM TestTable WHERE (ID NOT IN (SELECT TOP 页大小*页数 id FROM 表 ORDER BY id)) ORDER BY ID 2.分页方案 2:(利用ID大于多少和SELECT TOP分页) 语句形式: SELECT TOP 10 * FROM TestTable WHERE (ID > (SELECT MAX(id) FROM (SELECT TOP 20 id FROM TestTable ORDER BY id) AS T)) ORDER BY ID SELECT TOP 页大小 * FROM TestTable WHERE (ID > (SELECT MAX(id) FROM (SELECT TOP 页大小*页数 id FROM 表 ORDER BY id) AS T)) ORDER BY ID 3.分页方案 3:(利用SQL ![]() create procedure SqlPager @sqlstr nvarchar(4000), --查询 ![]() @currentpage ![]() @pagesize ![]() as ![]() ![]() exec sp_cursorfetch @P1,16,@currentpage,@pagesize exec sp_cursorclose @P1 ![]() 4.CREATE Procedure FramWorkPage @TableName varchar(50), --表名 @Fields varchar(5000) = '*', --字段名(全部字段为*) @OrderField varchar(5000), --排序字段(必须!支持多字段) @sqlWhere varchar(5000) = Null,--条件语句(不用加where) @pageSize ![]() @pageIndex ![]() @TotalPage ![]() @OrderType bit -- 设置排序类型,1 升序 0 值则降序 as begin declare @strOrder varchar(400) -- 排序类型 Begin Tran --开始事务 Declare @sql nvarchar(4000); Declare @totalRecord ![]() --计算总记录数 ![]() ![]() ![]() ![]() EXEC sp_executesql @sql,N'@totalRecord ![]() --计算总页数 select @TotalPage=@totalRecord --CEILING((@totalRecord+0.0)/@PageSize) ![]() begin ![]() --如果@OrderType是0 ![]() ![]() end ![]() begin ![]() end ![]() ![]() ![]() ![]() ![]() ![]() --处理页数超出范围情况 ![]() Set @pageIndex = 1 ![]() Set @pageIndex = @TotalPage --处理开始点和结束点 Declare @StartRecord ![]() Declare @EndRecord ![]() ![]() ![]() ![]() begin ![]() --如果@OrderType是0 ![]() ![]() end ![]() begin ![]() end --继续合成sql语句 ![]() -- pr ![]() Exec(@Sql) --------------------------------------------------- If @@Error <> 0 Begin RollBack Tran Return -1 End Else Begin Commit Tran Return @totalRecord ---返回记录总数 End end 通过上面这些东西 ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() 0
相关文章读者评论发表评论 |