欢迎来到天天文库
浏览记录
ID:9725592
大小:66.00 KB
页数:7页
时间:2018-05-06
《简析基于sqlserver分页存储过程的演进》由会员上传分享,免费在线阅读,更多相关内容在应用文档-天天文库。
1、简析基于SQLSERVER分页存储过程的演进>>教育资源库 针对数据库数据在UI界面上的分页是老生常谈的问题了,网上很容易找到各种通用存储过程代码,而且有些还定制查询条件,看上去使用很方便。笔者打算通过本文也来简单谈一下基于SQLSERVER2000的分页存储过程,同时谈谈SQLSERVER2005下分页存储过程的演进。 在进行基于UI显示的数据分页时,常见的数据提取方式主要有两种。第一种是从数据库提取所有数据然后在系统应用程序层进行数据分页,显示当前页数据。第二种分页方式为从数据库取出需要显示的一
2、页数据显示在UI界面上。 以下是笔者对两种实现方式所做的优缺点比较,针对应用程序编写,笔者以.技术平台为例。 类别 SQL语句 代码编写 设计时 性能 第一种 语句简单,兼容性好 很少 完全支持 数据越大性能越差 第二种 看具体情况 较多 部分支持 良好,跟SQL语句有关 对于第一种情况本文不打算举例,第二种实现方式笔者只以两次TOP方式来进行讨论。 在编写具体SQL语句之前,定义以下数据表。 数据表名称为:Production.Product。Production
3、为SQLSERVER2005中改进后的数据表架构,对举例不造成影响。 包含的字段为: 列名 数据类型 允许空 说明 ProductID Int 产品ID,PK。 Name Nvarchar(50) 产品名称。 不难发现以上表结构来自SQLSERVER2005样例数据库AdventureProduction.Product/*计算页面数据*/SETPageCount=CEILING(RecordCount*1.0/PageSize)/*TOP记录数*/DECLARETOPCOUNT
4、INTSETTOPCOUNT=RecordCount-PageSize*PageIndexDECLARESQLSTRNVARCHAR(1000)IFPageIndex=0ORPageCount<=1BEGINSETSQLSTR=N'SELECTTOP'+STR(PageSize)+'ProductID,NameFROMProduction.ProductORDERBYProductIDDESC'ENDELSEBEGINIFPageIndex=PageCount-1B
5、EGINSETSQLSTR=N'SELECT*FROM(SELECTTOP'+STR(TOPCOUNT)+'ProductID,NameFROMProduction.ProductORDERBYProductIDASC)TORDERBYProductIDDESC'ENDELSEBEGINSETSQLSTR=N'SELECTTOP'+STR(PageSize)+'*FROM(SELECTTOP'+STR(TOPCOUNT)+'Prod
6、uctID,NameFROMProduction.ProductORDERBYProductIDASC)TORDERBYProductIDDESC'ENDEND/*执行*/EXEC(SQLSTR) 以上存储过程对页数进行判断,如果是第一页或最后一页,进行特殊处理。其他情况使用2次TOP翻转。其中排序条件为ProductID倒序。最后通过EXECUTE执行SQL字符串拼串。2.SQLSERVER2005中的TOP分页CREATEPROCEDURE[dbo].[Zhzuo_GetItemsPage
7、2005TOP]PageIndexINT,PageSizeINT,RecordCountINTOUT,PageCountINTOUTAS/*获取记录数*/SELECTRecordCount=COUNT(*)FROMProduction.Product/*计算页面数据*/SETPageCount=CEILING(RecordCount*1.0/PageSize)/*TOP记录数*/DECLARETOPCOUNTINTSETTOPCOUNT=RecordCount-PageSize*PageIndex/*基
8、于SQLSERVER2005*/IFPageIndex=0ORPageCount<=1BEGINSELECTTOP(PageSize)ProductID,NameFROMProduction.ProductORDERBYProductIDDESCENDELSEBEGINIFPageIndex=PageCount-1BEGINSELECT*FROM(SELECTTOP(TOPCOUNT)ProductID,NameFROMProduct
此文档下载收益归作者所有