SQL Server基礎SQL指令碼之分割槽表、分割槽方案
阿新 • • 發佈:2022-05-03
程式碼120行左右 本系列,幾乎都是程式碼,記得當時寫的時候用的是微軟的官方例項資料庫AdventureWorks_Data.mdf、AdventureWorks_Log.ldf來執行的。 下載連結:連結: https://pan.baidu.com/s/1pMdLz6N 密碼: xvhu 或者回復“AdventureWorks”來獲取連結。
--建立檔案組 create database alex2 on primary (name='alex',filename='c:Dataalex.mdf',size=3mb,maxsize=10mb,filegrowth=1mb), Filegroup old (name='olddb',filename='c:Dataolddb.ndf',size=1mb,maxsize=10mb,filegrowth=1mb), Filegroup first (name='firstdb',filename='c:Datafirstdb.ndf',size=1mb,maxsize=10mb,filegrowth=1mb), Filegroup second (name='seconddb',filename='c:Dataseconddb.ndf',size=1mb,maxsize=10mb,filegrowth=1mb), Filegroup third (name='thirddb',filename='c:Datathirddb.ndf',size=1mb,maxsize=10mb,filegrowth=10%), Filegroup fourth (name='fourthdb',filename='c:Datafourthdb.ndf',size=1mb,maxsize=10mb,filegrowth=10%) log on (name='alex_log',filename='c:Dataalex_log.ldf',size=1mb,maxsize=10mb,filegrowth=1mb) go --使用資料庫 use alex2 go --建立分割槽函式 --按照一定的條件劃分資料 --range left (1900-01-01,1996-01-01] (1996-01-01,2000-01-01] 分界點的值歸左邊 --range right (1900-01-01,1996-01-01) [1996-01-01,2000-01-01) 分界點的值歸右邊 create partition function RateChngDate(datetime) as range right for values('1996-01-01','2000-01-01','2004-01-01','2008-01-01') --建立分割槽方案 --將分割槽函式區分的範圍和檔案組對應起來 create partition scheme RateChngDate_Scheme as partition RateChngDate to (Old,First,Second,Third,Fourth) --建立分割槽表 create table EmpPayHistPart ( EmployeeID int, RateChangeDate datetime, Rate money, PayFrequency tinyint, ModifiedDate datetime )on RateChngDate_Scheme(RateChangeDate) --新增資料 insert into EmpPayHistPart values(1,'1992-01-01',1200,2,'2005-01-01') insert into EmpPayHistPart values(1,'2001-01-01',1200,2,'2005-01-01') insert into EmpPayHistPart values(1,'2003-01-01',1200,2,'2005-01-01') insert into EmpPayHistPart values(1,'2005-01-01',1200,2,'2005-01-01') insert into EmpPayHistPart values(1,'2023-01-01',1200,2,'2005-01-01') --檢索分割槽 select * from EmpPayHistPart where $partition.RateChngDate(RateChangeDate)=0 select * from EmpPayHistPart where $partition.RateChngDate(RateChangeDate)=1 select * from EmpPayHistPart where $partition.RateChngDate(RateChangeDate)=2 select * from EmpPayHistPart where $partition.RateChngDate(RateChangeDate)=3 select * from EmpPayHistPart where $partition.RateChngDate(RateChangeDate)=4 select * from EmpPayHistPart where $partition.RateChngDate(RateChangeDate)=5 select * from EmpPayHistPart where $partition.RateChngDate(RateChangeDate)=6 select * from EmpPayHistPart ---------------分隔分割槽 --修改資料庫新增檔案組 alter database alex2 add filegroup Fifth --修改資料庫向檔案組中新增檔案 alter database alex2 add file(name='Fifthdb',filename='c:DataFifthdb.ndf',size=1mb,maxsize=10mb,filegrowth=1mb) to filegroup Fifth go --修改分割槽方案 讓下一個分割槽使用Fifth檔案組 alter partition scheme RateChngDate_Scheme next used Fifth --修改分割槽函式 加入一個臨界點2002-01-01 alter partition function RateChngDate() split range ('2002-01-01') go ---------------------合併分割槽 --將2008-01-01之後的資料和前一個分割槽資料合併 --原來是2004-01-01到2008-01-01,2008-01-01到以後 --現在是2004-01-01到以後 alter partition function RateChngDate() merge range('2008-01-01') -------------------建立表儲存分割槽 --修改資料庫新增檔案組Sixth alter database alex2 add filegroup Sixth --修改資料庫新增檔案到檔案組Sixth alter database alex2 add file(name='Sixthdb',filename='c:DataSixthdb.ndf',size=1mb,maxsize=10mb,filegrowth=1mb) to filegroup Sixth go --修改分割槽方案讓下一個分割槽對應檔案組Sixth alter partition scheme RateChngDate_Scheme next used Sixth --分隔資料分割槽 alter partition function RateChngDate() split range ('2012-01-01') go --建立表來儲存分割槽資料 create table New_EmpPayHistPart ( EmployeeID int, RateChangeDate datetime, Rate money, PayFrequency tinyint, ModifiedDate datetime )on Sixth --將分割槽6中的資料移動到新表中 alter table EmpPayHistPart switch partition 6 to New_EmpPayHistPart