SQL Server 2005中的分区表(六):将已分区表转换成普通表

在前面,咱们介绍过怎么样直接建立一个分区表,也介绍过怎么将一个普通表转换成一个分区表。那么,这两种方式建立的表有什么区别呢?如今,我又最新地建立了两个表:函数

    第一个表名为Sale,这个表使用的是《SQL Server 2005中的分区表(一):什么是分区表?为何要用分区表?如何建立分区表?》中的方法建立的,在建立完以后,还为该表添加了一个主键。spa

    第二个表名Sale1,这个表使用的是《SQL Server 2005中的分区表(三):将普通表转换成分区表 》中的方法建立的,也就是先建立了一个普通表,而后经过为普通表添加汇集索引的方式将普通表转换成已分区表的方式。.net

     经过以上方法均可以获得一个已分区表,可是,这两个已分区表仍是有点区别的,区别在哪里呢?咱们分别查看一下这两个表的索引和主键吧,以下图所示。blog

    从上图能够看出,直接建立的分区表Sale的索引里,只有一个名为PK_Sale的索引,这个索引是惟一的、非汇集的索引,也就是在建立PK_Sale主键时SQL Server自动建立的索引。而经普通表转换成分区表的Sale1的索引里,除了在建立主键时由SQL Server自动建立的名为PK_Sale1的惟一的、非汇集的索引以外,还存在一个名为CT_Sale1的汇集索引。索引

     对于表Sale来讲,能够经过修改分区函数的方式来将其转换成普通表,具体的修改方式请看《SQL Server 2005中的分区表(四):删除(合并)一个分区》,事实上,就是将分区函数中的全部分区分界都删除,那么,这个分区表中的全部数据就只能存在第一个分区表中了。在本例中,可使用如下代码来修改分区函数。ip

 

[c-sharp]  view plain copy
 
  1. ALTER PARTITION FUNCTION partfunSale()  
  2.     MERGE RANGE ('20100101')  
  3. ALTER PARTITION FUNCTION partfunSale()  
  4.     MERGE RANGE ('20110101')  
  5. ALTER PARTITION FUNCTION partfunSale()  
  6.     MERGE RANGE ('20120101')  
  7. ALTER PARTITION FUNCTION partfunSale()  
  8.     MERGE RANGE ('20130101')  

     事实上,这么操做以后,表Sale仍是一个分区表,以下图所示,只不过是只有一个分区的分区了,这和广泛表就没有什么区别了。get

     对于经过建立分区索引的方法将普通表转换成的分区表而言,除了上面的方法以外,还能够经过删除分区索引的办法来将分区表转换成普通表。但必需要通过如下两个步骤:string

    一、删除分区索引it

    二、在原来的索引字段上重建一个索引。io

     先说删除分区索引吧,这一步很简单,你能够直接在SQL Server Management Studio上将分区索引删除,也可使用SQL语句删除,如本例中可使用如下代码删除已经建立的分区索引。

 

[c-sharp]  view plain copy
 
  1. drop index Sale1.CT_Sale1  

     一开始,我还觉得只要删除了分区索引,那么分区表就会自动转换成普通表了,但是在删除索引以后,查看一下该表的属性,结果仍是已分区表,以下图所示。

    不但如此,并且,还不能将原来的汇集的惟一索引(在本例中为主键的那个索引)改为汇集索引,以下图所示。

     若是要完全解决这个问题,还必需要在原来建立分区索引的字段上从新建立一下索引,只有从新建立过索引以后,SQL Server才能将已分区表转换成普通表。在本例中可使用如下代码从新建立索引。

  

[c-sharp]  view plain copy
 
  1. CREATE CLUSTERED INDEX CT_Sale1 ON Sale1([SaleTime])  
  2. ON [PRIMARY]  
  3. Go  

     重建索引以后,分区表就变成了普通表,如今再查看一下Sale1表的属性,咱们能够看到原来的分区表已经变成了普通表,以下图所示。

     固然,以上两个步骤也能够合成一步完成,也就是在重建索引的同时,将原索引删除。如如下代码所示:

 [c-sharp] view plaincopy

 
  1. CREATE CLUSTERED INDEX CT_Sale1 ON Sale1([SaleTime])  
  2.     WITH ( DROP_EXISTING = ON)  
  3. ON [PRIMARY]  

     按理说,在SQL Server Management Studio中的操做和使用SQL语句的操做是同样的,但是我在SQL Server Management Studio中将汇集索引删除后再在该字段上从新建立一个同名的索引,并从新生成和组织该索引,但是分区表仍是没有变成普通表,这就让我百思不得其解了。不过呢,只要能用SQL语句达到目的,那咱们就用它吧。

  

原创不容易,转载请注明出处。http://blog.csdn.net/smallfools/archive/2009/12/14/5004100.aspx

相关连接:

SQL Server 2005中的分区表(一):什么是分区表?为何要用分区表?如何建立分区表?

SQL Server 2005中的分区表(二):如何添加、查询、修改分区表中的数据

SQL Server 2005中的分区表(三):将普通表转换成分区表 

SQL Server 2005中的分区表(四):删除(合并)一个分区

SQL Server 2005中的分区表(五):添加一个分区

SQL Server 2005中的分区表(六):将已分区表转换成普通表

相关文章
相关标签/搜索