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中的分區表(六):將已分區錶轉換成普通表

相關文章
相關標籤/搜索