浅谈基于SQL Server 分页存储过程的演进
简单谈基于SQL SERVER 分页存储过程的演进
作者:郑佐
日期:2006-9-30
针对数据库数据在UI界面上的分页是老生常谈的问题了,网上很容易找到各种“通用存储过程”代码,而且有些还定制查询条件,看上去使用很方便。笔者打算通过本文也来简单谈一下基于SQL SERVER 2000的分页存储过程,同时谈谈SQL SERVER 2005下分页存储过程的演进。
在进行基于UI显示的数据分页时,常见的数据提取方式主要有两种。第一种是从数据库提取所有数据然后在系统应用程序层进行数据分页,显示当前页数据。第二种分页方式为从数据库取出需要显示的一页数据显示在UI界面上。
以下是笔者对两种实现方式所做的优缺点比较,针对应用程序编写,笔者以.NET技术平台为例。
类别
SQL语句
代码编写
设计时
性能
第一种
语句简单,兼容性好
很少
完全支持
数据越大性能越差
第二种
看具体情况
较多
部分支持
良好,跟SQL语句有关
对于第一种情况本文不打算举例,第二种实现方式笔者只以两次TOP方式来进行讨论。
在编写具体SQL语句之前,定义以下数据表。
数据表名称为:Production.Product。Production为SQL SERVER 2005中改进后的数据表架构,对举例不造成影响。
包含的字段为:
列名
数据类型
允许空
说明
ProductID
Int
产品ID,PK。
Name
Nvarchar(50)
产品名称。
不难发现以上表结构来自SQL SERVER 2005 样例数据库AdventureWorks的Production.Product表,并且只取其中两个字段。
分页相关元素:
PageIndex – 页面索引计数,计数0为第一页。
PageSize – 每个页面显示大小。
RecordCount – 总记录数。
PageCount – 页数。
对于后两个参数,笔者在存储过程中以输出参数提供。
1.SQL SERVER 2000中的TOP分页
CREATE PROCEDURE [Zhzuo_GetItemsPage]
@PageIndex INT, /*@PageIndex从计数,0为第一页*/
@PageSize INT, /*页面大小*/
@RecordCount INT OUT, /*总记录数*/
@PageCount INT OUT /*页数*/
AS
/*获取记录数*/
SELECT @RecordCount = COUNT(*) from Production.Product
相关文档:
条件:
拥有sa权限
开启 xp_cmdshell
方法:
开启/关闭 xp_cmdshell 必须在 master 库执行
EXEC sp_configure 'show advanced options', 1
RECONFIGURE WITH OVERRIDE
EXEC sp_configure 'xp_cmdshell', 1
RECONFIGURE ......
方法一:
打开企业管理器->SQL SERVRE 组->(local)window NT ->属性
产品:有personal的是个人版的,有Enterprise的是企业版的
产品版本:8.00.2039(sp4);8.00.760(sp3)
方法二:
第一步:在查询分析器
select @@version
print @@version
Microsoft SQL Server 2000 - 8.00.2039 (Intel X86)
May 3 2005 ......
这个题目听起来十分拗口,英文应该这样写“How to find the service pack version installed on SQL Server using”,这个问题我一直在找,SQL Server一直没有像其他软件一样可以直接查看到版本+补丁号的方法,今天到一个老外的网站终于找到了:
有两种方法:
第一步:使用SQL语句查询
select @@version ......
已成功与服务器建立连接,但是在登录前的握手期间发生错误的处理方法
在用SQL SERVER 用户登陆SQL SERVER 2005时,弹出一个对话框,提示" 已成功与服务器建立连接,但是在登录前的握手期间发生错误",查找了一下原因,原来是SQL SERVER 2005时禁用TCP/IP登陆了,打开SQL SERVER 2005菜 ......
Sql Server中的日期与时间函数
1. 当前系统日期、时间
select getdate()
2. dateadd 在向指定日期加上一段时间的基础上,返回新的 datetime 值
例如:向日期加上2天
sele ......