溫馨提示×

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

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

SQL Server如何修改分區(qū)表中的數(shù)據(jù)

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

本篇內(nèi)容主要講解“SQL Server如何修改分區(qū)表中的數(shù)據(jù)”,感興趣的朋友不妨來看看。本文介紹的方法操作簡單快捷,實(shí)用性強(qiáng)。下面就讓小編來帶大家學(xué)習(xí)“SQL Server如何修改分區(qū)表中的數(shù)據(jù)”吧!

     在創(chuàng)建完分區(qū)表后,可以向分區(qū)表中直接插入數(shù)據(jù),而不用去管它這些數(shù)據(jù)放在哪個(gè)物理上的數(shù)據(jù)表中。接上篇文章,我們?cè)趧?chuàng)建好的分區(qū)表中插入幾條數(shù)據(jù):

    從以上代碼中可以看出,我們一共在數(shù)據(jù)表中插入了13條數(shù)據(jù),其中第1至3條數(shù)據(jù)是插入到第1個(gè)物理分區(qū)表中的;第4、5條數(shù)據(jù)是插入到第2個(gè)物理分區(qū)表中的;第6至8條數(shù)據(jù)是插入到第3個(gè)物理分區(qū)表中的;第9至11條數(shù)據(jù)是插入到第4個(gè)物理分區(qū)表中的;第12、13條數(shù)據(jù)是插入到第5個(gè)物理分區(qū)表中的。

    從SQL語句中可以看出,在向分區(qū)表中插入數(shù)據(jù)方法和在普遍表中插入數(shù)據(jù)的方法是完全相同的,對(duì)于程序員而言,不需要去理會(huì)這13條記錄研究放在哪個(gè)數(shù)據(jù)表中。當(dāng)然,在查詢數(shù)據(jù)時(shí),也可以不用理會(huì)數(shù)據(jù)到底是存放在哪個(gè)物理上的數(shù)據(jù)表中。如使用以下SQL語句進(jìn)行查詢:

   select * from Sale  

   查詢的結(jié)果如下圖所示:

SQL Server如何修改分區(qū)表中的數(shù)據(jù)

    從上面兩個(gè)步驟中,根本就感覺不到數(shù)據(jù)是分別存放在幾個(gè)不同的物理表中,因?yàn)樵谶壿嬌?,這些數(shù)據(jù)都屬于同一個(gè)數(shù)據(jù)表。如果你非想知道哪條記錄是放在哪個(gè)物理上的分區(qū)表中,那么就必須使用到$PARTITION函數(shù),這個(gè)函數(shù)的可以調(diào)用分區(qū)函數(shù),并返回?cái)?shù)據(jù)所在物理分區(qū)的編號(hào)。

    說起來有點(diǎn)難懂,不過用起來很簡單。$PARTITION的語法是:

  $PARTITION.分區(qū)函數(shù)名(表達(dá)式)

    假設(shè),你想知道2010年10月1日的數(shù)據(jù)會(huì)放在哪個(gè)物理分區(qū)表中,你就可以使用以下語句來查看。

select $PARTITION.partfunSale ('2010-10-1')  

    在以上語句中,partfunSale()為分區(qū)函數(shù)名,括號(hào)中的表達(dá)式必須是日期型的數(shù)據(jù)或可以隱式轉(zhuǎn)換成日期型的數(shù)據(jù),如果要問我為什么,那么就回想一個(gè)怎么定義分區(qū)函數(shù)的吧(CREATE PARTITION FUNCTION partfunSale (datetime))。在定義partfunSale()函數(shù)時(shí),指定了參數(shù)為日期型,所以括號(hào)中的表達(dá)式必須是日期型或可以隱式轉(zhuǎn)換成日期型的數(shù)據(jù)。以上代碼的運(yùn)行結(jié)果如下圖所示:

SQL Server如何修改分區(qū)表中的數(shù)據(jù)

    在該圖中可以看出,分區(qū)函數(shù)返回的結(jié)果為2,也就是說,2010年10月1日的數(shù)據(jù)會(huì)放在第2個(gè)物理分區(qū)表中。

    再進(jìn)一步考慮,如果想具體知道每個(gè)物理分區(qū)表中存放了哪些記錄,也可以使用$PARTITION函數(shù)。因?yàn)?PARTITION函數(shù)可以得到物理分區(qū)表的編號(hào),那么只要將$PARTITION.partfunSale(SaleTime)做為where的條件使用即可,如以下代碼 所示:

select * from Sale where $PARTITION.partfunSale(SaleTime)=1  

select * from Sale where $PARTITION.partfunSale(SaleTime)=2  

select * from Sale where $PARTITION.partfunSale(SaleTime)=3  

select * from Sale where $PARTITION.partfunSale(SaleTime)=4  

select * from Sale where $PARTITION.partfunSale(SaleTime)=5  

    以上代碼的運(yùn)行結(jié)果如下圖所示:

SQL Server如何修改分區(qū)表中的數(shù)據(jù)

    從上圖中我們可以看到每個(gè)分區(qū)表中的數(shù)據(jù)記錄情況——和我們插入時(shí)設(shè)置的情況完全一致。同理可得,如果要統(tǒng)計(jì)每個(gè)物理分區(qū)表中的記錄數(shù),可以使用如下代碼:

select $PARTITION.partfunSale(SaleTime) as 分區(qū)編號(hào),count(id) as 記錄數(shù) from Sale group by $PARTITION.partfunSale(SaleTime)  

    以上代碼的運(yùn)行結(jié)果如下圖所示:

SQL Server如何修改分區(qū)表中的數(shù)據(jù)

    除了在插入數(shù)據(jù)時(shí)程序員不需要去考慮分區(qū)表的物理情況之外,就是連修改數(shù)據(jù)也不需要考慮。SQL Server會(huì)自動(dòng)將記錄從一個(gè)分區(qū)表移到另一個(gè)分區(qū)表中,如以下代碼所示:

--統(tǒng)計(jì)所有分區(qū)表中的記錄總數(shù)  

select $PARTITION.partfunSale(SaleTime) as 分區(qū)編號(hào),count(id) as 記錄數(shù) from Sale group by $PARTITION.partfunSale(SaleTime)  

--修改編號(hào)為1的記錄,將時(shí)間改為2019年1月1日  

update Sale set SaleTime='2019-1-1' where id=1  

--重新統(tǒng)計(jì)所有分區(qū)表中的記錄總數(shù)  

select $PARTITION.partfunSale(SaleTime) as 分區(qū)編號(hào),count(id) as 記錄數(shù) from Sale group by $PARTITION.partfunSale(SaleTime)  

    在以上代碼中,程序員將其中一條數(shù)據(jù)的時(shí)間改變了,從分區(qū)函數(shù)中可以得知,這條記錄應(yīng)該從第一個(gè)分區(qū)表移到第五個(gè)分區(qū)表中,如下圖所示。而整個(gè)操作過程,程序員是完全不需要干預(yù)的。

SQL Server如何修改分區(qū)表中的數(shù)據(jù)

到此,相信大家對(duì)“SQL Server如何修改分區(qū)表中的數(shù)據(jù)”有了更深的了解,不妨來實(shí)際操作一番吧!這里是億速云網(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)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI