李晓亮的博客

导航

SQL Server的分页

1.SQL Sever 2000
[1]取第一页的分页SQL语句如下:
SELECT TOP 页大小 字段列表 FROM 表名 WHERE语句 ORDER BY语句
[2]取其它页的分页SQL语句如下:
SELECT TOP 页大小 字段列表 FROM 表名 WHERE语句 ORDER BY语句

 

【使用自增列与临时表】
select identity(int,1,1) recid,选取字段列表 into #temp from 表名 order by 排序字段列表;
select * from #temp t where t.recid> (页编号-1)*页大小 and t.recid< 页编号*页大小;

drop table #temp;

2.SQL Server 2005---
SELECT  *  FROM
(   SELECT   *, 
    ROW_NUMBER()   OVER   (PARTITION   BY   分栏目字段   ORDER   BY   排序字段)   AS   ROWNUMBER  
    FROM   表
)  B

知识点:SqlServer 序号列的实现方法
(1)对于 SQL SERVER 2000 及更早的版本,需要使用一个自增列,结合临时表来实现。
代码如下:
SELECT [AUTOID] = IDENTITY(int,1,1), * INTO #temp_table FROM 表名;
SELECT * FROM #temp_table;
仅当 SELECT 语句中有 INTO 子句时,才能使用 IDENTITY 函数。

(2)从SQL SERVER 2005 开始, SQL SERVER 提供了一个 ROW_NUMBER() 函数,大大简化了工作。

代码如下:
SELECT *,ROW_NUMBER() OVER (ORDER BY 排序字段) AS [AUTOID] FROM 表名;

序号字段的别名,可以在后续的条件中使用。
---------------------------------------------------------------------------------------------------

identity(seed,range) 创建一个标识列,与null,not null并列。seed表示种子,即初始值;range表示增长幅度。
局部临时表 #xxx ,只能被当前会话访问,在该会话结束后自动消失。
全局临时表 ##xx , 可以供多个用户使用,在该会话结束后自动消失。
---------------------------------------------------------------------------------------------------
#表示局部临时表,局部临时表只对创建它的会话时可见的。会话结束后,临时表自动删除。若由存储过程创建,则存储过程结束时删除临时表。比如过程A调用存储过程B时,A看不到B的临时表。若B被A1,A2,A3多个过程调用,则同一时刻可能存在多个B的临时表。
##表示全局临时表,全局临时表对所有活动会话都可见。所有访问完成后,才会自动删除。比如上例中,A,A1,A2,A3都可以看到B的临时表。

posted on 2012-04-18 23:32  LeeXiaoLiang  阅读(175)  评论(0)    收藏  举报