当前位置:首页 > 系统运维 > 正文内容

对SQL Server中任意select语句分页的存储过程

a8116255316年前 (2010-09-03)系统运维6

对SQL Server中任意select语句,如何才能分页呢?下面将为您建立一个通用的存储过程,对SQL Server中任意select语句进行分页,供您参考。

CREATE   PROCEDURE   [dbo].[usp_ResultWithPage]

@fields_Type varchar(1000),     --字段列表(带类型),用于@t表变量的字段声明,如:PhotoID int,UserID int,PhotoTitle nvarchar(50)

@fieldsInT varchar(500),     --字段列表(不带类型),用于分页部分读取@t表变量的字段,也可使用*代替,但性能会下降,如:PhotoID ,UserID ,PhotoTitle

@selectSrting varchar(2000),     --向@t表变量中读取记录的Select语句,如:SELECT PhotoID ,UserID ,PhotoTitle FROM Photo_Basic

@result_OrderBy varchar(200),     --对分页结果进行排序的字段,如:升序'PhotoID ASC'、降序'PhotoID DESC'

@pageSize int,     --页尺寸,0表示返回所有行

@currentPage int,     --当前页,首页为1

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

AS

BEGIN

---------------得到表变量@t-------------------------

DECLARE   @strSql   varchar(2000)

SET @strSql = 'DECLARE @t TABLE(' + @fields_Type + ');'

SET @strSql = @strSql + 'INSERT  INTO @t ' + @selectSrting + ';'

--显示表变量的内容

--SET @strSql = @strSql + 'SELECT ' + @fieldsInT + ' FROM @t;'

----------进行分页------------------------------------

IF   @pageSize   =   0

    SET   @strSql  = @strSql +  'SELECT '   +   @fieldsInT  + ' FROM @t ;'

ELSE

    IF   @currentPage   =   1

        SET   @strSql   = @strSql +     'SELECT TOP( ' + Str(@pageSize) + ') ' + @fieldsInT + ' FROM @t ;'

    ELSE

    BEGIN

SET   @strSql   = @strSql +  'SELECT TOP( ' + Str(@pageSize) + ') * FROM ( SELECT TOP(' + Str(@pageSize * @currentPage) + ') *, ROW_NUMBER() OVER (ORDER BY ' + @result_OrderBy + ')'

SET   @strSql   = @strSql +  ' AS   RowNumber   FROM  @t'

SET   @strSql   = @strSql +  ' ) AS r WHERE   r.RowNumber   >  ' + Str(@pageSize * (@currentPage - 1)) + ';'

    END

IF @IsReCount != 0

    SET @strSql = 'SELECT COUNT(1) AS Total FROM @t ;'

--RETURN @strSql

EXEC(@strSql)

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

END

总结一下,主要思想还是用了sql server 的 top row_number函数。

扫描二维码推送至手机访问。

版权声明:本文由2345好导航站长资讯发布,如需转载请注明出处。

本文链接:http://2345hao.cn/blog/index.php/post/22335.html

分享给朋友:

“对SQL Server中任意select语句分页的存储过程” 的相关文章

如何删除自带的不常用应用为windows 7减负

如何删除自带的不常用应用为windows 7减负

对于Windows 7系统来说,其默认安装的许多工具是我们很少使用或从来不用的,比如系统自带的扫雷、纸牌游戏等。删除此类长期不用的系统组件,不但可以让系统更清爽,更重要的是还可以提高系统的运行速度,特别是对于硬件配置相对较低的上网本来说,尤其如此。接下来,笔者就给大家介绍一下如何删除Windows...

上帝不止一个 更多Windows7 快捷模式.

上帝不止一个 更多Windows7 快捷模式.

国外媒体CNET NEWS就这个“上帝模式”和微软Windows部门主管Steven Sinofsky进行邮件交流后得知,这其实只是众多快捷方式中的一个,Sinofsky在邮件里给出了十多个这类快捷方式的关键字符串。 它们的建立方法和之前的“上帝模式”一样,在任意位置新建的一个文件夹,然后改名即可...

各个都很实用:windows 7系统电脑日常小技巧

各个都很实用:windows 7系统电脑日常小技巧

在使用Windows 7的时候很多用户对于系统的很多功能并不是很了解,也正是因为这样的不了解导致很多用户在使用Win 之后并不能体验Windows 7的功能便携和强大功能,导致很多用户对于Windows 7的认识还是比较模糊,不过为了让更多的朋友了解Windows 7的特点和便携应用,今天就为大家汇...

windows 7系统重装后卡在正在启动Windows开机界面怎么办

windows 7系统重装后卡在正在启动Windows开机界面怎么办

重装系统是我们面对许多电脑问题时的终极方法,不过重装系统也不意味着就能将全部的问题都修复。一些用户在重装系统后开机时,电脑卡在“正在启动Windows”开机界面上了,这要怎么解决呢? Windows 7系统重装后卡在开机界面的解决方法: 一、首先可以看看该故障出现的原因是否是因为启动了acp...

windows 7如何给c盘扩容 图解windows 7 64位系统C盘扩容方法(自

windows 7如何给c盘扩容 图解windows 7 64位系统C盘扩容方法(自

用Windows 7久了,C盘越来越大,原来50G的空间基本用完了,又不想重装系统,就想着能不能直接扩容。 在网上搜了半天,看了无数教程,都写得不明不白的,结合了几篇教程才终于搞明白。 重新总结一下,方便有需要的人。 所用软件: http://www.jb51.net/softs/57895...

windows 7旗舰版系统提示应用程序错误代码0xc0000409的故障原因

windows 7旗舰版系统提示应用程序错误代码0xc0000409的故障原因

问题现象,具体如下所示:  故障分析: 一般来说,出现这种情况是因为电脑误删系统文件或者是系统文件被顽固木马破坏。       解决方法: 1、下载360安全卫士,找到里面的急救箱开始急救,然后进行修复,完成后重新启动; 2、下载瑞...