Asp.Net分页存储过程

SQL分页语句

一、比较万能的分页:

sql代码:


1

2

3

select top 每页显示的记录数 * from topic where id not in

 (select top (当前的页数-1)×每页显示的记录数 id from topic order by id desc)

 order by id desc

需要注意的是在access中不能是top 0,所以如果数据只有一页的话就得做判断了。。

二、SQL2005中的分页代码:

sql代码:


1

2

3

4

5

6

--讲查询出来的结果集作为一张临时表

with tempTable as (

  select Row_Number() over (order by id desc) as RowNum, * from tableName

)

--从临时表中取得指定行号区间的行

SELECT * FROM tempTable where RowNum between @startIndex and @endIndex

注:ROW_NUMBER() OVER (ORDER BY id desc)为SQL2005新增函数,表示取出每一列的行号

三、分页存储过程SQL代码: 

1、第一种UP_GetRecordByPage,包含计算总条数(推荐

SET ANSI_NULLS ON

GO

SET QUOTED_IDENTIFIER ON

GO

------------------------------------

--用途:分页存储过程 

--说明:

------------------------------------

CREATE  PROCEDURE [dbo].[UP_GetRecordByPage]

    @tblName      varchar(255),       -- 表名

    @fldName    varchar(255),       -- 排序字段名

    @PageSize     int = 10,           -- 页尺寸

    @PageIndex    int = 1,            -- 页码

    @IsReCount    bit = 0,            -- 返回记录总数, 非 0 值则返回

    @OrderType    bit = 0,            -- 设置排序类型, 非 0 值则降序

    @strWhere     varchar(1000) = ‘1=1‘  -- 查询条件 (注意: 不要加 where)

AS

declare @begin int ,@end int,@sql varchar(4000),@order varchar(5)

set @begin[email protected]* (@PageIndex-1) +1

set @end[email protected]begin[email protected]

set @order=‘‘

if(@OrderType=1)

    set @order=‘ desc‘

set @sql=

select * from

(

select 

ROW_NUMBER() over(order by ‘ + @fldName + @order +‘ ) as od,

*

from ‘[email protected] +

 where ‘ + @strWhere +

‘) as tbl

where od between ‘ + rtrim(ltrim(str(@begin)))+‘ and ‘ + rtrim(ltrim(str(@end)))

exec (@sql)

if(@IsReCount=1)

    exec(‘select count(*) from ‘+ @tblName+‘ where ‘ [email protected])

用法:

/// <summary>

        /// 分页获取数据列表

        /// </summary>

        public DataSet GetList(int pageSize,int pageIndex,string strWhere,bool isCount)

        {

            SqlParameter[] parameters = {

                    new SqlParameter("@tblName", SqlDbType.VarChar, 255),

                    new SqlParameter("@fldName", SqlDbType.VarChar, 255),

                    new SqlParameter("@pageSize", SqlDbType.Int),

                    new SqlParameter("@pageIndex", SqlDbType.Int),

                    new SqlParameter("@IsReCount", SqlDbType.Bit),

                    new SqlParameter("@OrderType", SqlDbType.Bit),

                    new SqlParameter("@strWhere", SqlDbType.VarChar,1000),

                    };

            parameters[0].Value = "Whir_MemberDownRuleValue";

            parameters[1].Value = "MemberLever";

            parameters[2].Value = pageSize;

            parameters[3].Value = pageIndex;

            if(isCount){

                parameters[4].Value = 1;

            }

            else{

                parameters[4].Value = 0;

            }

            parameters[5].Value = 0;

            parameters[6].Value = strWhere;

            return DbHelperSQL.RunProcedure("UP_GetRecordByPage",parameters,"ds");

        }

2、sql代码:(不带计算总条数)

 

SET ANSI_NULLS ON

GO

SET QUOTED_IDENTIFIER ON

GO

-- =============================================

-- Author:      牛腩

-- Create date: 2009-07-22 12:41

-- Description: 分页,用到了ROW_NUMBER()

-- =============================================

ALTER PROCEDURE [dbo].[proc_ShowPage]

@tblName   varchar(255),       -- 表名,也可传入inner join内连接

@strGetFields varchar(1000) = ‘*‘, -- 需要返回的列,默认*

@strOrder varchar(255)=‘‘,      -- 排序的字段名,必填

@strOrderType varchar(10)=‘ASC‘, -- 排序的方式,默认ASC

@PageSize   int = 10,          -- 页尺寸,默认10

@PageIndex int = 1,           -- 页码,默认1

@strWhere varchar(1500) = ‘‘ -- 查询条件 (注意: 不要加 where)

AS

declare @strSQL   varchar(5000)

if @strWhere !=‘‘

set @strWhere=‘ where ‘[email protected]

set @strSQL=

‘SELECT * FROM (‘+

    ‘SELECT ROW_NUMBER() OVER (ORDER BY ‘[email protected]+‘ ‘[email protected]+‘) AS pos,‘[email protected]+‘ ‘+

    ‘FROM [‘[email protected]+‘] ‘[email protected]+

‘) AS sp WHERE pos BETWEEN ‘+str((@PageIndex-1)*@PageSize+1)+‘ AND ‘+str(@PageIndex*@PageSize)

exec (@strSQL)

print @strSQL  -- 测试用,可在查询的时候看到生成的SQL语句

时间: 2024-10-09 06:20:51

Asp.Net分页存储过程的相关文章

ASP.NET 分页存储过程 及 调用

create procedure [dbo].[sp_PagingTabs] @TableName nvarchar(200), /* 表名 */ @FieldName nvarchar(500), /* 要查询的字段 */ @where nvarchar(500), /* 查询的条件 */ @OrderField nvarchar(500), /* 排序指定的字段 */ @Order nvarchar(50), /* 排序 只能是 asc desc */ @PageIdORField nvar

asp.net利用存储过程分页代码

-最通用的分页存储过程 -- 获取指定页的数据 CREATE PROCEDURE Pagination @tblName varchar(255), -- 表名 @strGetFields varchar(1000) = '*', -- 需要返回的列 @fldName varchar(255)='', -- 排序的字段名 @PageSize int = 10, -- 页尺寸 @PageIndex int = 1, -- 页码 @doCount bit = 0, -- 返回记录总数, 非 0 值则

千万级数据分页存储过程 asp.net页面调用分页全过程

下方有调用过程 从程序中考虑:比如用数据缓冲和连接池技术从数据库服务器端考虑:比如csdn只选出前300行纪录,因为用户不需要那么多纪录.你也不必把1000万条全部分页.你也不必把纪录放在一个表中,一年(太多就一个月)的数据放一张表或定期把历史数据导出到数据数据仓库中,不要用一张表装1000万条记录.做好索引.优化查询!尽量少用模糊查询,避免表扫描.不能让客户端连续多次搜索(csdn就是) 千万级的数据库,有分页的意义吗?对于用户来说就是信息的海洋了,去看看Google怎么做的吧,根本就不存在如

sql 可按任意字段排序的分页存储过程

最近做一个项目,其中有许多部分需要用到分页功能 并且这些需要分页的地方有一个共同的特点,那就是,分页,但并不是按ID(主键)来排序,而是要求按其他有重复值的列进行排序,比如,其中有一个页面,要列出将近1万条客户记录,要求按客户付费金额进行排序,这种情况,如果使用网上流行的通用分页存储过程是行不能的,比如,像下面的分页存储过程虽然很棒,可是,用在这里的话,就无计可施:(这个存储过程是我在CSDN上看到一位前辈高人写的) CREATE PROCEDURE GetRecordFromPage @tbl

asp.net分页控件使用详解【附实例下载】

本篇文章主要对asp.net创建事务的方法进行实例介绍,具有很好的参考价值,需要的朋友一起来看下吧 一.说明 AspNetPager.dll这个分页控件主要用于asp.net webform网站,现将整理代码如下 二.代码 1.首先在测试页面Default.aspx页面添加引用 <%@ Register Assembly="AspNetPager" Namespace="Wuqi.Webdiyer" TagPrefix="webdiyer"

SQL基础分页存储过程(案例一)

1 --分页 存储过程 案例 2 3 -- 所执行的存储过程 4 create proc pageForUsers 5 @currPage int, --当前页数 6 @pageSize int, --每页多少条记录 7 @count int output --总记录数 8 as 9 declare @firstIndex int 10 declare @lastIndex int 11 declare @sqlText varchar(200) 12 13 --统计总记录数 14 select

多表查询分页存储过程,解决了第二页不显示的问题

SET ANSI_NULLS OFFGOSET QUOTED_IDENTIFIER OFFGO ALTER PROCEDURE [dbo].[UP_Pagination]/****************************************************************** 千万数量级分页存储过程 *****************************************************************参数说明:1.Tables :表名称,视

oracle分页存储过程

oracle分页存储过程: CREATE OR REPLACE PROCEDURE FGK.prc_page (p_tableName in varchar2, --表名 p_strWhere in varchar2, --查询条件 p_orderColumn in varchar2, --排序的列 p_orderStyle in varchar2, --排序方式 p_curPage in out Number, --当前页 p_pageSize in out Number, --每页显示记录条

sql笔记/分页存储过程

[email protected]c#中进行++操作可以是整数或小数,sql中只能对整数进行++操作.char类型 适合存储长度波动较小不回收效率高varchar 类型 适合存储长度波动较大可以回收nchar代表unicode 存储内容包括汉字时候考虑加n SQL语句特点1不区分大小写2没有双引号所有字符串都包含在单引号3没有逻辑相等,逻辑相等和赋值一样都是用=4没有bool值得概念,但是在视图中可以输入true/false5也有关系运算符.6也有逻辑运算符 &&-- and || --o