溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務(wù)條款》

SQL Server怎么將已分區(qū)表轉(zhuǎn)換成普通表

發(fā)布時間:2021-08-21 03:28:48 來源:億速云 閱讀:257 作者:chen 欄目:大數(shù)據(jù)

本篇內(nèi)容主要講解“SQL Server怎么將已分區(qū)表轉(zhuǎn)換成普通表”,感興趣的朋友不妨來看看。本文介紹的方法操作簡單快捷,實用性強(qiáng)。下面就讓小編來帶大家學(xué)習(xí)“SQL Server怎么將已分區(qū)表轉(zhuǎn)換成普通表”吧!

    在前面,我們介紹過怎么樣直接創(chuàng)建一個分區(qū)表,也介紹過怎么將一個普通表轉(zhuǎn)換成一個分區(qū)表。那么,這兩種方式創(chuàng)建的表有什么區(qū)別呢?現(xiàn)在,我又最新地創(chuàng)建了兩個表:

    第一個表名為Sale,在創(chuàng)建完之后,還為該表添加了一個主鍵。

    第二個表名Sale1,這個表使用的是一個普通表,然后通過為普通表添加聚集索引的方式將普通表轉(zhuǎn)換成已分區(qū)表的方式。

    通過以上方法都可以得到一個已分區(qū)表,但是,這兩個已分區(qū)表還是有點區(qū)別的,區(qū)別在哪里呢?我們分別查看一下這兩個表的索引和主鍵吧,如下圖所示。

SQL Server怎么將已分區(qū)表轉(zhuǎn)換成普通表

    從上圖可以看出,直接創(chuàng)建的分區(qū)表Sale的索引里,只有一個名為PK_Sale的索引,這個索引是唯一的、非聚集的索引,也就是在創(chuàng)建PK_Sale主鍵時SQL Server自動創(chuàng)建的索引。而經(jīng)普通表轉(zhuǎn)換成分區(qū)表的Sale1的索引里,除了在創(chuàng)建主鍵時由SQL Server自動創(chuàng)建的名為PK_Sale1的唯一的、非聚集的索引之外,還存在一個名為CT_Sale1的聚集索引。

    對于表Sale來說,可以通過修改分區(qū)函數(shù)的方式來將其轉(zhuǎn)換成普通表,具體的修改方式請看《SQL Server的分區(qū)表(四):刪除(合并)一個分區(qū)》,事實上,就是將分區(qū)函數(shù)中的所有分區(qū)分界都刪除,那么,這個分區(qū)表中的所有數(shù)據(jù)就只能存在第一個分區(qū)表中了。在本例中,可以使用以下代碼來修改分區(qū)函數(shù)。

ALTER PARTITION FUNCTION partfunSale()  

    MERGE RANGE ('20100101')  

ALTER PARTITION FUNCTION partfunSale()  

    MERGE RANGE ('20110101')  

ALTER PARTITION FUNCTION partfunSale()  

    MERGE RANGE ('20120101')  

ALTER PARTITION FUNCTION partfunSale()  

    MERGE RANGE ('20130101')  

    事實上,這么操作之后,表Sale還是一個分區(qū)表,如下圖所示,只不過是只有一個分區(qū)的分區(qū)了,這和普遍表就沒有什么區(qū)別了。

SQL Server怎么將已分區(qū)表轉(zhuǎn)換成普通表

    對于通過創(chuàng)建分區(qū)索引的方法將普通表轉(zhuǎn)換成的分區(qū)表而言,除了上面的方法之外,還可以通過刪除分區(qū)索引的辦法來將分區(qū)表轉(zhuǎn)換成普通表。但必須要經(jīng)過以下兩個步驟:

    1、刪除分區(qū)索引

    2、在原來的索引字段上重建一個索引。

    先說刪除分區(qū)索引吧,這一步很簡單,你可以直接在SQL Server Management Studio上將分區(qū)索引刪除,也可以使用SQL語句刪除,如本例中可以使用以下代碼刪除已經(jīng)創(chuàng)建的分區(qū)索引。

drop index Sale1.CT_Sale1  

    一開始,我還以為只要刪除了分區(qū)索引,那么分區(qū)表就會自動轉(zhuǎn)換成普通表了,可是在刪除索引之后,查看一下該表的屬性,結(jié)果還是已分區(qū)表,如下圖所示。

SQL Server怎么將已分區(qū)表轉(zhuǎn)換成普通表

    不但如此,而且,還不能將原來的聚集的唯一索引(在本例中為主鍵的那個索引)改成聚集索引,如下圖所示。

SQL Server怎么將已分區(qū)表轉(zhuǎn)換成普通表

    如果要徹底解決這個問題,還必須要在原來創(chuàng)建分區(qū)索引的字段上重新創(chuàng)建一下索引,只有重新創(chuàng)建過索引之后,SQL Server才能將已分區(qū)表轉(zhuǎn)換成普通表。在本例中可以使用以下代碼重新創(chuàng)建索引。

CREATE CLUSTERED INDEX CT_Sale1 ON Sale1([SaleTime])  

ON [PRIMARY]  

Go  

    重建索引之后,分區(qū)表就變成了普通表,現(xiàn)在再查看一下Sale1表的屬性,我們可以看到原來的分區(qū)表已經(jīng)變成了普通表,如下圖所示。

SQL Server怎么將已分區(qū)表轉(zhuǎn)換成普通表

    當(dāng)然,以上兩個步驟也可以合成一步完成,也就是在重建索引的同時,將原索引刪除。如以下代碼所示:

CREATE CLUSTERED INDEX CT_Sale1 ON Sale1([SaleTime])  

    WITH ( DROP_EXISTING = ON)  

ON [PRIMARY]  

    按理說,在SQL Server Management Studio中的操作和使用SQL語句的操作是一樣的,可是我在SQL Server Management Studio中將聚集索引刪除后再在該字段上重新創(chuàng)建一個同名的索引,并重新生成和組織該索引,可是分區(qū)表還是沒有變成普通表,這就讓我百思不得其解了。不過呢,只要能用SQL語句達(dá)到目的,那我們就用它吧。

到此,相信大家對“SQL Server怎么將已分區(qū)表轉(zhuǎn)換成普通表”有了更深的了解,不妨來實際操作一番吧!這里是億速云網(wǎng)站,更多相關(guān)內(nèi)容可以進(jìn)入相關(guān)頻道進(jìn)行查詢,關(guān)注我們,繼續(xù)學(xué)習(xí)!

向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI