本篇文章給大家分享的是有關(guān)如何添加查詢以及修改SQL Server分區(qū)表中的數(shù)據(jù),小編覺得挺實用的,因此分享給大家學習,希望大家閱讀完這篇文章后可以有所收獲,話不多說,跟著小編一起來看看吧。
創(chuàng)新互聯(lián)公司主營柳城網(wǎng)站建設的網(wǎng)絡公司,主營網(wǎng)站建設方案,app軟件定制開發(fā),柳城h5微信小程序定制開發(fā)搭建,柳城網(wǎng)站營銷推廣歡迎柳城等地區(qū)企業(yè)咨詢
正文開始
在創(chuàng)建完分區(qū)表后,可以向分區(qū)表中直接插入數(shù)據(jù),而不用去管它這些數(shù)據(jù)放在哪個物理上的數(shù)據(jù)表中。我們在創(chuàng)建好的分區(qū)表中插入幾條數(shù)據(jù):
從以上代碼中可以看出,我們一共在數(shù)據(jù)表中插入了13條數(shù)據(jù),其中第1至3條數(shù)據(jù)是插入到第1個物理分區(qū)表中的;第4、5條數(shù)據(jù)是插入到第2個物理分區(qū)表中的;第6至8條數(shù)據(jù)是插入到第3個物理分區(qū)表中的;第9至11條數(shù)據(jù)是插入到第4個物理分區(qū)表中的;第12、13條數(shù)據(jù)是插入到第5個物理分區(qū)表中的。
從SQL語句中可以看出,在向分區(qū)表中插入數(shù)據(jù)方法和在普遍表中插入數(shù)據(jù)的方法是完全相同的,對于程序員而言,不需要去理會這13條記錄研究放在哪個數(shù)據(jù)表中。當然,在查詢數(shù)據(jù)時,也可以不用理會數(shù)據(jù)到底是存放在哪個物理上的數(shù)據(jù)表中。如使用以下SQL語句進行查詢:
select * from Sale
查詢的結(jié)果如下圖所示:
從上面兩個步驟中,根本就感覺不到數(shù)據(jù)是分別存放在幾個不同的物理表中,因為在邏輯上,這些數(shù)據(jù)都屬于同一個數(shù)據(jù)表。如果你非想知道哪條記錄是放在哪個物理上的分區(qū)表中,那么就必須使用到$PARTITION函數(shù),這個函數(shù)的可以調(diào)用分區(qū)函數(shù),并返回數(shù)據(jù)所在物理分區(qū)的編號。
說起來有點難懂,不過用起來很簡單。$PARTITION的語法是
$PARTITION.分區(qū)函數(shù)名(表達式)
假設,你想知道2010年10月1日的數(shù)據(jù)會放在哪個物理分區(qū)表中,你就可以使用以下語句來查看。
select $PARTITION.partfunSale ('2010-10-1')
在以上語句中,partfunSale()為分區(qū)函數(shù)名,括號中的表達式必須是日期型的數(shù)據(jù)或可以隱式轉(zhuǎn)換成日期型的數(shù)據(jù),如果要問我為什么,那么就回想一個怎么定義分區(qū)函數(shù)的吧(CREATE PARTITION FUNCTION partfunSale (datetime))。在定義partfunSale()函數(shù)時,指定了參數(shù)為日期型,所以括號中的表達式必須是日期型或可以隱式轉(zhuǎn)換成日期型的數(shù)據(jù)。以上代碼的運行結(jié)果如下圖所示:
在該圖中可以看出,分區(qū)函數(shù)返回的結(jié)果為2,也就是說,2010年10月1日的數(shù)據(jù)會放在第2個物理分區(qū)表中。
再進一步考慮,如果想具體知道每個物理分區(qū)表中存放了哪些記錄,也可以使用$PARTITION函數(shù)。因為$PARTITION函數(shù)可以得到物理分區(qū)表的編號,那么只要將$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
以上代碼的運行結(jié)果如下圖所示:
從上圖中我們可以看到每個分區(qū)表中的數(shù)據(jù)記錄情況——和我們插入時設置的情況完全一致。同理可得,如果要統(tǒng)計每個物理分區(qū)表中的記錄數(shù),可以使用如下代碼:
select $PARTITION.partfunSale(SaleTime) as 分區(qū)編號,count(id) as 記錄數(shù) from Sale group by $PARTITION.partfunSale(SaleTime)
以上代碼的運行結(jié)果如下圖所示:
除了在插入數(shù)據(jù)時程序員不需要去考慮分區(qū)表的物理情況之外,就是連修改數(shù)據(jù)也不需要考慮。SQL Server會自動將記錄從一個分區(qū)表移到另一個分區(qū)表中,如以下代碼所示:
--統(tǒng)計所有分區(qū)表中的記錄總數(shù)
select $PARTITION.partfunSale(SaleTime) as 分區(qū)編號,count(id) as 記錄數(shù) from Sale group by $PARTITION.partfunSale(SaleTime)
--修改編號為1的記錄,將時間改為2019年1月1日
update Sale set SaleTime='2019-1-1' where id=1
--重新統(tǒng)計所有分區(qū)表中的記錄總數(shù)
select $PARTITION.partfunSale(SaleTime) as 分區(qū)編號,count(id) as 記錄數(shù) from Sale group by $PARTITION.partfunSale(SaleTime)
在以上代碼中,程序員將其中一條數(shù)據(jù)的時間改變了,從分區(qū)函數(shù)中可以得知,這條記錄應該從第一個分區(qū)表移到第五個分區(qū)表中,如下圖所示。而整個操作過程,程序員是完全不需要干預的。
以上就是如何添加查詢以及修改SQL Server分區(qū)表中的數(shù)據(jù),小編相信有部分知識點可能是我們?nèi)粘9ぷ鲿姷交蛴玫降?。希望你能通過這篇文章學到更多知識。更多詳情敬請關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道。