這問題今天糾結了我一天了。
下面的代碼是網上轉載來的
create partition function PF_Orders_OrderDateRange(datetime)
as
range right for values (
'1997-01-01',
'1998-01-01',
'1999-01-01'
)
go
-- 建立資料分割配置
create partition scheme PS_Orders
as
partition PF_Orders_OrderDateRange
to ([primary], [primary], [primary], [primary])
go
-- 建立分區表
sp_rename 'dbo.Orders','Orders_From_SQL2000_Northwind'
create table dbo.Orders
(
OrderID int not null
,CustomerID varchar(10) not null
,EmployeeID int not null
,OrderDate datetime not null
)
on PS_Orders(OrderDate)
go
-- 建立聚集分區索引
create clustered index IXC_Orders_OrderDate on dbo.Orders(OrderDate)
go
-- 為分區表設定主鍵
alter table dbo.Orders add constraint PK_Orders
primary key (OrderID, CustomerID, OrderDate)
go
-- 匯入資料到分區表
insert into dbo.Orders
select OrderID, CustomerID, EmployeeID, OrderDate
from dbo.Orders_From_SQL2000_Northwind --(註:資料來源於 SQL Server 2000 樣本資料庫)
go
-- 查看分區表每個分區的資料分布情況
select partition = $partition.PF_Orders_OrderDateRange(OrderDate)
,rows = count(*)
,minval = min(OrderDate)
,maxval = max(OrderDate)
from dbo.Orders
group by $partition.PF_Orders_OrderDateRange(OrderDate)
order by partition
GO
create table dbo.Orders_1998
(
OrderID int not null
,CustomerID varchar(10) not null
,EmployeeID int not null
,OrderDate datetime not null
) on [primary]
go
create clustered index IXC_Orders1998_OrderDate on dbo.Orders_1998(OrderDate)
go
alter table dbo.Orders_1998 add constraint PK_Orders_1998
primary key nonclustered (OrderID, CustomerID, OrderDate)
go
alter table dbo.Orders switch partition 3 to dbo.Orders_1998
go
alter table dbo.Orders_1998 add constraint CK_Orders1998_OrderDate
check (OrderDate>='1998-01-01' and OrderDate<'1999-01-01')
go
alter table dbo.Orders_1998 switch to dbo.Orders partition 3
這段代碼是沒問題的,普通表能成功的switch 分區表。但是有一點要注意:分區欄位為 not null。如果你改為null 不好意思 switch 不了。
只能出不能進。