目前接到一个需求,将一个table安装日期和工厂进行分区操作。table 'T1' 字段如下[WERKID] [NVARCHAR(4)] NOT NULL,
[NUM] [NVARCHAR(13)] NOT NULL,
[ProductID] [NVARCHAR(18)] NULL,
[BUDAT] [NVARCHAR(8)] NULL,
[CHDAT] [NVARCHAR(8)] NULL,
[CHMAN] [NVARCHAR(10)] NULL需求:按照WERKID 及 BUDAT 对 T1进行分区条件1:WERKID =1001 、 WERKID = 2002 、 OTHERS条件2: BUDAT < 2011.12.31 、 BUDAT < 2012.12.31 、 BUDAT < 2013.21.31 、 OTHERS一共分为 3 * 4 = 12 个分区。请教解决方案,如果有,请麻烦写详细一点,呵呵 TKS
[NUM] [NVARCHAR(13)] NOT NULL,
[ProductID] [NVARCHAR(18)] NULL,
[BUDAT] [NVARCHAR(8)] NULL,
[CHDAT] [NVARCHAR(8)] NULL,
[CHMAN] [NVARCHAR(10)] NULL需求:按照WERKID 及 BUDAT 对 T1进行分区条件1:WERKID =1001 、 WERKID = 2002 、 OTHERS条件2: BUDAT < 2011.12.31 、 BUDAT < 2012.12.31 、 BUDAT < 2013.21.31 、 OTHERS一共分为 3 * 4 = 12 个分区。请教解决方案,如果有,请麻烦写详细一点,呵呵 TKS
/*
1.创建分区函数
*/CREATE PARTITION FUNCTION
pf_test(int)
as range left
for values(500,1000)/*
2. 创建不同的文件组
*/
Alter DATABASE AdventureWorks
add filegroup fg01
Alter DATABASE AdventureWorks
add filegroup fg02
Alter DATABASE AdventureWorks
add filegroup fg03ALTER DATABASE AdventureWorks
add file
(
name=file01,
filename='C:\Program Files\Microsoft SQL Server\MSSQL10.MSSQLSERVER\MSSQL\DATA\file01.mdf',
size=5mb,
filegrowth=1mb
)
to filegroup fg01
ALTER DATABASE AdventureWorks
add file
(
name=file02,
filename='C:\Program Files\Microsoft SQL Server\MSSQL10.MSSQLSERVER\MSSQL\DATA\file02.mdf',
size=5mb,
filegrowth=1mb
)
to filegroup fg02
ALTER DATABASE AdventureWorks
add file
(
name=file03,
filename='C:\Program Files\Microsoft SQL Server\MSSQL10.MSSQLSERVER\MSSQL\DATA\file03.mdf',
size=5mb,
filegrowth=1mb
)
to filegroup fg03/*
3.创建scheme
*/CREATE PARTITION SCHEME ps_test
AS PARTITION pf_test
TO([FG01],[FG02],[FG03])/*
4.创建table
*/
CREATE TABLE [dbo].[TestDatabaseLog](
[DatabaseLogID] [int] IDENTITY(1,1) NOT NULL,
[PostTime] [datetime] NOT NULL,
[DatabaseUser] [sysname] NOT NULL,
[Event] [sysname] NOT NULL,
[Schema] [sysname] NULL,
[Object] [sysname] NULL,
[TSQL] [nvarchar](max) NOT NULL,
[XmlEvent] [xml] NOT NULL,
CONSTRAINT [PK_TestDatabaseLog_DatabaseLogID] PRIMARY KEY NONCLUSTERED
(
[DatabaseLogID] ASC
)
)
ON ps_test(DatabaseLogId)
GO/*
5.插入数据
*/
SET IDENTITY_INSERT dbo.TestDatabaseLog On
INSERT INTO TestDatabaseLog
SELECT * FROM DatabaseLogSET IDENTITY_INSERT TestDatabaseLog Off/*
6.查看分区结果
*/
select $partition.pf_test(DatabaseLogID) as 'partition number',
COUNT(*) 'Rows in partition'
from DATABASELOGBAK
group by $partition.pf_test(DatabaseLogID);
/*********************************************************************************************************************//*
1.创建分区函数
*/
create partition function OrderDateRangePFN(datetime)
AS RANGE RIGHT
FOR VALUES(N'2001-01-01 00:00:00',N'2002-01-01 00:00:00',N'2003-01-01 00:00:00',N'2004-01-01 00:00:00');/*
2。创建分区scheme
*/
create partition scheme OrderDatePScheme
as partition OrderDateRangePFN
TO([Primary],[Primary],[Primary],[Primary],[Primary])/*
3.创建表
*/CREATE TABLE DBO.[SalesOrderHeader](
[SalesOrderID] [int] NULL,
[RevisionNumber] [tinyint] NOT NULL,
[OrderDate] [datetime] NOT NULL,
[DueDate] [datetime] NOT NULL,
[ShipDate] [datetime] NULL,
[Status] [tinyint] NOT NULL
) ON OrderDatePScheme (OrderDate)
/* 旧表*/
CREATE TABLE DBO.[SalesOrderHeaderOLD](
[SalesOrderID] [int] NULL,
[RevisionNumber] [tinyint] NOT NULL,
[OrderDate] [datetime] NOT NULL,
[DueDate] [datetime] NOT NULL,
[ShipDate] [datetime] NULL,
[Status] [tinyint] NOT NULL
) /*
4。插入数据
*/
INSERT INTO dbo.SalesOrderHeader
SELECT SalesOrderID,RevisionNumber,OrderDate,DueDate,ShipDate,Status FROM Sales.SalesOrderHeaderCREATE CLUSTERED INDEX SalesOrderHeaderCLInd
ON SalesOrderHeader(OrderDate) ON OrderDatePScheme(OrderDate)CREATE CLUSTERED INDEX SalesOrderHeaderOLDCLInd
ON SalesOrderHeaderOLD(OrderDate)ALTER TABLE SalesOrderHeaderOLD WITH CHECK ADD CONSTRAINT
ck_SalesOrderHeaderOLD_Orderdate check (
orderdate >=('2003-01-01 00:00:00') and orderdate <=('2003-12-31 00:00:00'))
/*
5.查看分区结果
*/
select $partition.OrderDateRangePFN(OrderDate) as 'partition number',
MIN(OrderDate) as 'Min Order Date',
MAX(OrderDate) as 'Max Order Date',
COUNT(*) as 'Rows In Partition'
From SalesOrderHeader
group by $partition.OrderDateRangePFN(OrderDate);Select * From SalesOrderHeaderOLD
delete from SalesOrderHeaderOLD
/*
6。切换分区内容到未分区的表
*/
Alter table SalesOrderHeader
switch partition 4 to salesOrderheaderOLDSelect * From SalesOrderHeaderOLD/*切换未分区的表内容到某个分区上*/
alter table salesorderheaderold
switch to salesorderheader partition 4
--Select * From SalesOrderHeaderOLD/*
7.合并分区范围
*/
alter partition scheme orderdatepscheme next used [primary];
alter partition function orderdaterangePFN() split range ('2003-01-01 00:00:00');
我试试看。
而我面临的是table里面都是定义的nvarchar类型。不知道是否可行
input_parameter_type
是用于分区的列的数据类型。当用作分区列时,除 text、ntext、image、xml、timestamp、varchar(max)、nvarchar(max)、varbinary(max)、别名数据类型或 CLR 用户定义数据类型外,所有数据类型均有效。
联机丛书上的。
--------------------------
看来我的需求是没有解决方案了。