在读取大量数据的时候我们可以通过DataReader对数据进行分页以提高性能,还有一个更好的方法就是在存储过程中对数据进行分页。
假设有一个Products表字段有(ProductID,Name,Description, Price)
以下方法只支持SQLServer 2005 因为ROW_NUMBER()函数是SQLServer 2005新增的。
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
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中速度高效。
联系客服