mssqlserver存储过程分页

 代码如下 复制代码

USE [BeyondDB]
GO
/****** Object:  StoredProcedure [dbo].[Y_Paging]    Script Date: 02/22/2013 14:53:26 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
ALTER proc [dbo].[Y_Paging]
(
    @TableName VARCHAR(max)=null,     --表名          
    @FieldList VARCHAR(max)=null,    --显示列名,如果是全部字段则为*          
    @PrimaryKey VARCHAR(max)=null,    --单一主键或唯一值键          
    @Where NVARCHAR(max)=null,        --查询条件 不含'where'字符,如id>10 and len(userid)>9          
    @Order VARCHAR(max)=null,        --排序 不含'order by'字符,如id asc,userid desc,必须指定asc或desc

            
    @SortType INT=null,               --排序规则 1:正序asc 2:倒序desc 3:多列排序方法          
    @RecorderCount INT=null,          --记录总数 0:会返回总记录          
    @PageSize INT=null,               --每页输出的记录数          
    @PageIndex INT=null,              --当前页数      
    @Keyword varchar(max)=null,       --关键字
    @FieldOne varchar(max)=null,       --字段1
    @FieldTwo varchar(max)=null,       --字段2
    @TotalCount INT OUTPUT,      --记返回总记录          
    @TotalPageCount INT OUTPUT   --返回总页数         
)
as
begin
 
    DECLARE @sql NVARCHAR(max);
    DECLARE @totalSql NVARCHAR(max);
     
          
     
    if(@Keyword is not null and @Keyword !='')
    begin
        if  ISNULL(@FieldOne,'') != ''
         set @Order=@Order+' , (case when charindex('''+replace(@Keyword,' ',''','+@FieldOne+')>0 then

1 else 0 end)+(case when charindex(''')+''','+@FieldOne+')>0 then 1 else 0 end) '
        if  ISNULL(@FieldOne,'') != ''
        set @Order=@Order+' , (case when charindex('''+replace(@Keyword,' ',''','+@FieldTwo+')>0 then 1

else 0 end)+(case when charindex(''')+''','+@FieldTwo+')>0 then 1 else 0 end) '
        end
     
    if(@SortType is not null and @SortType=1)
        set @Order=@Order+' asc '
    if(@SortType is not null and @SortType=2)
        set @Order=@Order+' desc '
 
    SET @sql = ' WITH LIST AS
                 (   
                    SELECT  ' + @FieldList + ',ROW_NUMBER() OVER (ORDER BY ' + @Order + ') as RowNumber
                    FROM ' + @TableName + ' 
                    WHERE 1=1 ' + @Where + '
                     
                 ) 
                 SELECT * FROM LIST WHERE RowNumber BETWEEN ' + STR(@PageIndex+1) + ' AND ' + STR

(@PageIndex + @PageSize)                    
                 
    set @totalSql = ' SELECT  @TOTALCOUNT=COUNT(*) FROM ' + @TableName + ' WHERE 1=1 ' + @Where    
                          
    print(@Sql)
    EXEC(@Sql)                     
    --EXEC sp_executesql  @totalSql,N'
    --                          @ID uniqueidentifier,
                --              @StatusList varchar(max),
                --              @BeginTime datetime,
                --              @EndTime datetime,
                --              @TitleOrNo varchar(max),
                --              @Excutor  uniqueidentifier,
                --              @Assignor uniqueidentifier,
    --                            @TotalCount int output
    --                            ',
    --                            @ID  ,
                --              @StatusList  ,
                --              @BeginTime  ,
                --              @EndTime ,
                --              @TitleOrNo ,
                --              @Excutor,
                --              @Assignor,
    --                            @TotalCount output
end
 
--调用实例
USE [BeyondDB]
GO
 
DECLARE @return_value int,
        @TotalCount int,
        @TotalPageCount int
 
EXEC    @return_value = [dbo].[Y_Paging]
        @TableName = N'Account',
        @FieldList = N'*',
        @PrimaryKey = N'id',
        @Where = N' and 1=1',
        @Order = N' CreateTime ',
        @SortType =2,
        @PageSize = 5,
        @PageIndex = 0,
        @RecorderCount = null,
        @Keyword = N'1',
        @FieldOne = N'Accountname',
        @FieldTwo = N'accountid',
        @TotalCount = @TotalCount OUTPUT,
        @TotalPageCount = @TotalPageCount OUTPUT
 
SELECT  @TotalCount as N'@TotalCount',
        @TotalPageCount as N'@TotalPageCount'
 
SELECT  'Return Value' = @return_value
 
GO

时间: 2024-10-01 15:11:01

mssqlserver存储过程分页的相关文章

存储过程分页又一方法(使用table变量)(摘)

变量|存储过程|分页 要创建一个返回指定条记录结果的存储过程,首先必须指定返回结果集的条记录数,可以用临时表,也可以用table变量(SQL Server 2000),两个在性能上没有太大的差别,但是,table变量是存储在内存中的,如果你的服务器内存不多的话,可以考虑用临时表,临时表使用硬盘存储结果,临时表需要手工释放对象,而table变量在存储过程结束后自动释放.     下面就是我们要创建的存储过程: create proc GetAuthors@Author_Last_Name as v

ASP的一个简单的用存储过程分页

存储过程|分页 使用这个存储过程可以实现分页的,新手可以看看哦!create proc proPage(@pageid int ,@pagesize int)asbeginif (@pageid=1)begin set rowcount @pagesize select * from test order by idendelsebegin declare @no1 int declare @num int select @num=@pagesize*(@pageid-1) set rowcou

关于存储过程分页,我的测试情况

存储过程|分页 在精华区中关于存储过程分页大概有三种思路分别是:临时表,参见658037 在下提供一个存储过程分页的方法游标,参见658066 一种理论上最快的Web数据库分页方法! set rowcount 方法,参见658606 关于存储过程分页我做了一个10万条记录的表来进行测试结果临时表光建立数据就用了四十秒游标有大小限制,我的机子上最大只能到1万条,更多的就无法用了.set rowcount 方法不错,5000多页,只用不到1秒.呵呵

关于存储过程分页

存储过程|分页 看了几个朋友写的关于存储过程分页的文章,感觉有点问题.starleee和东方蜘蛛希望我能发表点看法,我简单说一下. 首先是allsky的那个分页方法根本就不成立,看看他是这样的:select @iStart=(@iPage-1)*@iPageSizeselect @iEnd=@iStart+@iPageSize+1也就是说,他的开始和结束id按照每页显示数硬算出来的,想要这种方法成立必须满足这样一个条件,即这个论坛只有一个版面,并且id从1开始是连续的,中间不能有间隔,也就是说如

存储过程分页

存储过程|分页 作者:bigeagle if exists(select * from sysobjects where ID = object_id("up_TopicList")) drop proc up_TopicListgo create proc up_TopicList @a_ForumID int , @a_intDays int , @a_intPageNo int , @a_intPageSize tinyint as declare @m_intRecordNum

KMCT分页控件与存储过程分页完美结合---存储过程分页篇

上一篇分页控件(KCMT开源控件之--方便简洁的分页控件)出来以后,好几位网友期待我的存储过程分 页与该控件结合使用的例程,这个星期工作很忙,一直没有时间完成.今天终于抽出时间来完成这篇文章 . 首先从存储过程分页谈起 为什么要选择用存储过程分页呢?其实原因很简单,数据库查询功能的性能终究是有限的.即使我们 对数据库进行了最优配置,对数据表设计再三斟酌,然而一旦面临海量数据,且返回结果集较大的时候, 常规的查询语句就无能为力了.一般说来,当返回的结果集超过总数量的40%时,数据库层面上的优化就

SQLServer2005及以上存储过程分页方法

  最近实习期间,项目开发过程中遇到了分页问题,问题如下: 在项目开发过程中,往往会遇到展示展示内容的问题.当内容数量不多的时候,我们直接用一条"SELECT * FROM ..."将去不内容提取出来也无伤大雅.但是,随着项目的不断扩大,将过多的内容展示在一个页面就显得不合理了,此时,就要用到分页技术. 其实分页,包括前台分页和后台分页. 所谓前台分页:就是一次性后天存储设备取出多页数据,传到前台,再分页展示.前台分页的好处是: 1.当每次去适量数据时,取数据时间并没有太大影响,前台分

请教GridView利用存储过程分页的问题?谢谢!

问题描述 本人属于菜鸟,跪求GridView利用存储过程分页的代码,最好有详细的说明.使用的后台语言为C#,数据库为SQLServer.不胜感谢! 解决方案 解决方案二: 可以用session也可以用隐藏控件之类的解决方案三: 俄搞错了我还以为是状态保存解决方案四: <asp:LabelID="lblPage"runat="server"Text='<%#"第"+(((GridView)Container.NamingContaine

silverlight + wcf(json格式) + sqlserver存储过程分页

silverlight并没有提供现成的分页控件,百度了一圈,也没有发现aspx中好用的类似AspNetPager成熟控件,网上现有的一些分页代码,很多也是基于1.0版本的,silverlight2.0的并不多,自个儿琢磨了一下,发现自己弄一个也并非难事,思路和主要代码分享如下: 1.通用的"海量"数据分页存储过程在做aspx开发时我已经用存储过程分页多年,这个东东是通用的(不管前端用什么语言来做),而且性能也不错,所以这里就直接套过来用了,百度一下"分页存储过程"会