其实基本上有三种方法:
1、使用SQL Server 2005中新增的ROW_NUMBER
几种写法分别如下:

2

3

4

5

6

7

8


2

3

4

5

6

7


2

3

4

5

6

7

8

9

不管哪种写法,性能都不理想。在8,9万条数据的情况下要运行6秒左右。
2、使用临时表再加存储过程

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

而使用这种方法,在同样的情况下用时只需1秒。
看样子,row_number是个鸡肋。
3、如果觉得临时表不好,还可以使用SET ROWCOUNT

2

3

4

5

6

7

8

9

10

11

12

13

14

15

不过,这种方法有缺点。按ID排序就快,按其他字段排序就慢。
大家有什么意见,欢迎拍砖。
参考文章:
http://www.4guysfromrolla.com/webtech/042606-1.shtml
http://www.4guysfromrolla.com/webtech/041206-1.shtml
http://www.singingeels.com/Articles/Pagination_In_SQL_Server_2005.aspx