1. 程式人生 > 其它 >SQL Server基礎SQL指令碼之分割槽表、分割槽方案

SQL Server基礎SQL指令碼之分割槽表、分割槽方案

程式碼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