简析基于sql server分页存储过程的演进--

简析基于sql server分页存储过程的演进--

ID:9710674

大小:66.00 KB

页数:7页

时间:2018-05-05

简析基于sql server分页存储过程的演进--_第1页
简析基于sql server分页存储过程的演进--_第2页
简析基于sql server分页存储过程的演进--_第3页
简析基于sql server分页存储过程的演进--_第4页
简析基于sql server分页存储过程的演进--_第5页
资源描述:

《简析基于sql server分页存储过程的演进--》由会员上传分享,免费在线阅读,更多相关内容在应用文档-天天文库

1、简析基于SQLSERVER分页存储过程的演进>>  针对数据库数据在UI界面上的分页是老生常谈的问题了,网上很容易找到各种通用存储过程代码,而且有些还定制查询条件,看上去使用很方便。笔者打算通过本文也来简单谈一下基于SQLSERVER2000的分页存储过程,同时谈谈SQLSERVER2005下分页存储过程的演进。  在进行基于UI显示的数据分页时,常见的数据提取方式主要有两种。第一种是从数据库提取所有数据然后在系统应用程序层进行数据分页,显示当前页数据。第二种分页方式为从数据库取出需要显示的一页数据显示在UI界面上。  以下是

2、笔者对两种实现方式所做的优缺点比较,针对应用程序编写,笔者以.技术平台为例。  类别  SQL语句  代码编写  设计时  性能  第一种  语句简单,兼容性好  很少  完全支持  数据越大性能越差  第二种  看具体情况  较多  部分支持  良好,跟SQL语句有关  对于第一种情况本文不打算举例,第二种实现方式笔者只以两次TOP方式来进行讨论。  在编写具体SQL语句之前,定义以下数据表。  数据表名称为:Production.Product。Production为SQLSERVER2005中改进后的数据表架构,对举例不

3、造成影响。  包含的字段为:  列名  数据类型  允许空  说明  ProductID  Int  产品ID,PK。  Name  Nvarchar(50)  产品名称。  不难发现以上表结构来自SQLSERVER2005样例数据库AdventureProduction.Product/*计算页面数据*/SETPageCount=CEILING(RecordCount*1.0/PageSize)/*TOP记录数*/DECLARETOPCOUNTINTSETTOPCOUNT=RecordCount-PageSize*PageI

4、ndexDECLARESQLSTRNVARCHAR(1000)IFPageIndex=0ORPageCount<=1BEGINSETSQLSTR=N'SELECTTOP'+STR(PageSize)+'ProductID,NameFROMProduction.ProductORDERBYProductIDDESC'ENDELSEBEGINIFPageIndex=PageCount-1BEGINSETSQLSTR=N'SELECT*FROM(SELECTTOP'+STR(TO

5、PCOUNT)+'ProductID,NameFROMProduction.ProductORDERBYProductIDASC)TORDERBYProductIDDESC'ENDELSEBEGINSETSQLSTR=N'SELECTTOP'+STR(PageSize)+'*FROM(SELECTTOP'+STR(TOPCOUNT)+'ProductID,NameFROMProduction.ProductORDERBYProductIDASC)TORDERBYProdu

6、ctIDDESC'ENDEND/*执行*/EXEC(SQLSTR)  以上存储过程对页数进行判断,如果是第一页或最后一页,进行特殊处理。其他情况使用2次TOP翻转。其中排序条件为ProductID倒序。最后通过EXECUTE执行SQL字符串拼串。2.SQLSERVER2005中的TOP分页CREATEPROCEDURE[dbo].[Zhzuo_GetItemsPage2005TOP]PageIndexINT,PageSizeINT,RecordCountINTOUT,PageCountINTOUTAS/*获取记录数*/

7、SELECTRecordCount=COUNT(*)FROMProduction.Product/*计算页面数据*/SETPageCount=CEILING(RecordCount*1.0/PageSize)/*TOP记录数*/DECLARETOPCOUNTINTSETTOPCOUNT=RecordCount-PageSize*PageIndex/*基于SQLSERVER2005*/IFPageIndex=0ORPageCount<=1BEGINSELECTTOP(PageSize)ProductID,NameFROMP

8、roduction.ProductORDERBYProductIDDESCENDELSEBEGINIFPageIndex=PageCount-1BEGINSELECT*FROM(SELECTTOP(TOPCOUNT)ProductID,NameFROMProduction.P

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。