打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
如何在数据层分页以提高性能 (2005)

在读取大量数据的时候我们可以通过DataReader对数据进行分页以提高性能,还有一个更好的方法就是在存储过程中对数据进行分页。

    假设有一个Products表字段有(ProductID,Name,Description, Price)

以下方法只支持SQLServer 2005 因为ROW_NUMBER()函数是SQLServer 2005新增的。

 1
CREATE PROCEDURE GetProducts
 2

 3
(
@DescriptionLength INT,           --定义参数:描述长度
 4

 5
@PageNumber INT,                --页码
 6

 7
@ProductsPerPage INT,             --每页产品数 
 8

 9
@HowManyProducts INT OUTPUT)  --产品总数
10

11
AS
12

13
-- 定义一个Table变量
14

15
DECLARE @Products TABLE
16

17
(RowNumber 
INT,
18

19
 ProductID 
INT
20

21
 Name 
VARCHAR(50), 
22

23
 Description 
VARCHAR(5000)
24

25
Price 
MONEY)
26

27
-- 把数据读到刚定义的@Products 中
28

29
INSERT INTO @Products    
30

31
SELECT ROW_NUMBER() OVER (ORDER BY Product.ProductID), 
32

33
       ProductID, Name, 
34

35
       
SUBSTRING(Description, 1@DescriptionLength+ '
' AS Description, Price,
36

37
FROM Product 
38

39
-- 返回产品数
40

41
SELECT @HowManyProducts = COUNT(ProductID) FROM @Products
42

43
-- 返回请求页面的数据
44

45
SELECT ProductID, Name, Description, Price
46

47
FROM @Products
48

49
WHERE RowNumber > (@PageNumber - 1* @ProductsPerPage 
50

51
  
AND RowNumber <= @PageNumber * @ProductsPerPage
52

53

 

SQLServer 2000中可以用以下的方法:

  

CREATE PROCEDURE GetProducts

(@DescriptionLength INT,           --定义参数:描述长度

@PageNumber INT,                --页码

@ProductsPerPage INT,             --每页产品数

@HowManyProducts INT OUTPUT) --产品总数

AS

-- 定义一个Table变量

DECLARE #Products TABLE           --这里一定要用‘#’(声明为本地临时表)

(RowNumber SMALLINT NOT NULL IDENTITY(1,1),    --类型一定要自动递增

 ProductID INT,

 Name VARCHAR(50),

 Description VARCHAR(5000)

Price MONEY)

-- 把数据读到刚定义的#Products

INSERT INTO #Products (ProductID, Name, Description, Price)  

SELECT

       ProductID, Name,

       SUBSTRING(Description, 1, @DescriptionLength) + '...' AS Description, Price,

FROM Product

-- 返回产品数

SELECT @HowManyProducts = COUNT(ProductID) FROM #Products

-- 返回请求页面的数据

SELECT ProductID, Name, Description, Price

FROM #Products

WHERE RowNumber > (@PageNumber - 1) * @ProductsPerPage

 AND RowNumber <= @PageNumber * @ProductsPerPage

 

大家都清楚了吧,这种方法比在DataReader中速度高效。

本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
UniDDataBase
四种方式实现SQLServer 分页查询
查询分页的几种Sql写法
mysql、sqlserver、oracle分页,java分页统一接口实现
S2SH项目实现分页功能
分页标签:pager
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服