2017-02-15 71 views
2

我創建的數據庫爲了SQL Server的分區的錯誤

USE [master] 
GO 

CREATE DATABASE [testdb] 
CONTAINMENT = NONE 
ON PRIMARY 
(NAME = N'testdb', FILENAME = N'D:\MSSQL\Data\testdb.mdf' , SIZE = 8192KB , MAXSIZE = UNLIMITED, FILEGROWTH = 65536KB), 
FILEGROUP [2016] 
(NAME = N'2016', FILENAME = N'D:\MSSQL\Data\2016.ndf' , SIZE = 8192KB , MAXSIZE = UNLIMITED, FILEGROWTH = 65536KB), 
FILEGROUP [2017] 
(NAME = N'2017', FILENAME = N'D:\MSSQL\Data\2017.ndf' , SIZE = 8192KB , MAXSIZE = UNLIMITED, FILEGROWTH = 65536KB), 
FILEGROUP [2018] 
(NAME = N'2018', FILENAME = N'D:\MSSQL\Data\2018.ndf' , SIZE = 8192KB , MAXSIZE = UNLIMITED, FILEGROWTH = 65536KB), 
FILEGROUP [2019] 
(NAME = N'2019', FILENAME = N'D:\MSSQL\Data\2019.ndf' , SIZE = 8192KB , MAXSIZE = UNLIMITED, FILEGROWTH = 65536KB), 
FILEGROUP [2020] 
(NAME = N'2020', FILENAME = N'D:\MSSQL\Data\2020.ndf' , SIZE = 8192KB , MAXSIZE = UNLIMITED, FILEGROWTH = 65536KB) 
LOG ON 
(NAME = N'testdb_log', FILENAME = N'D:\MSSQL\Data\testdb_log.ldf' , SIZE = 8192KB , MAXSIZE = 2048GB , FILEGROWTH = 65536KB) 
GO 
ALTER DATABASE [testdb] SET COMPATIBILITY_LEVEL = 130 
GO 

我有一個表

CREATE TABLE [dbo].[ticket2](
    [id] [int] NULL, 
    [datesell] [datetime] NULL, 
    [status] [int] NULL 
) ON [PRIMARY] 
GO 

接下來,我添加分區此表

USE [testdb] 
GO 

BEGIN TRANSACTION 
CREATE PARTITION FUNCTION [byYear](datetime) AS RANGE LEFT FOR VALUES (N'2015-12-31T23:59:59', N'2017-01-01T00:00:00', N'2018-01-01T00:00:00', N'2019-01-01T00:00:00', N'2020-01-01T00:00:00') 

CREATE PARTITION SCHEME [years] AS PARTITION [byYear] TO ([PRIMARY], [2016], [2017], [2018], [2019], [2020]) 

CREATE CLUSTERED INDEX [ClusteredIndex_on_years_636227525068063988] ON [dbo].[ticket2] 
(
    [datesell] 
)WITH (SORT_IN_TEMPDB = OFF, DROP_EXISTING = OFF, ONLINE = OFF) ON [years]([datesell]) 

DROP INDEX [ClusteredIndex_on_years_636227525068063988] ON [dbo].[ticket2] 

COMMIT TRANSACTION 
GO 

時,我添加一些數據到我的表中,我看到下一個 Data in partitions

接下來,我增加了一個分區,爲明年

ALTER DATABASE testdb 
ADD FILEGROUP [2021] 

ALTER DATABASE testdb 
ADD FILE 
(NAME = N'2021', FILENAME = N'D:\MSSQL\Data\2021.ndf' , SIZE = 8192KB , MAXSIZE = UNLIMITED, FILEGROWTH = 65536KB) TO FILEGROUP [2021] 

ALTER PARTITION SCHEME [years] NEXT USED [2021]; 
ALTER PARTITION FUNCTION byYear() split RANGE (N'2022-01-01T00:00:00') 

BEGIN TRANSACTION 
CREATE CLUSTERED INDEX [ClusteredIndex_on_years_636227647501414735] ON [dbo].[ticket2] 
(
    [datesell] 
)WITH (SORT_IN_TEMPDB = OFF, DROP_EXISTING = OFF, ONLINE = OFF) ON [years]([datesell]) 
DROP INDEX [ClusteredIndex_on_years_636227647501414735] ON [dbo].[ticket2] 
COMMIT TRANSACTION 

我看錯分區順序。 Wrong partitions order

分區2020仍然是最後一個,但最後一個分區必須是2021年並與銷售之日起超過2022年1月1日的所有數據將在分區2020年,但我希望看到他們在分區2021。

爲什麼是這樣?

回答

0

您是否錯過了2020分區的N'2021-01-01T00:00:00?

USE [testdb] 
GO 

BEGIN TRANSACTION 
CREATE PARTITION FUNCTION [byYear](datetime) AS RANGE LEFT FOR VALUES (N'2015-12-31T23:59:59', N'2017-01-01T00:00:00', N'2018-01-01T00:00:00', N'2019-01-01T00:00:00', N'2020-01-01T00:00:00', N'2021-01-01T00:00:00') 

CREATE PARTITION SCHEME [years] AS PARTITION [byYear] TO ([PRIMARY], [2016], [2017], [2018], [2019], [2020]) 

CREATE CLUSTERED INDEX [ClusteredIndex_on_years_636227525068063988] ON [dbo].[ticket2] 
(
    [datesell] 
)WITH (SORT_IN_TEMPDB = OFF, DROP_EXISTING = OFF, ONLINE = OFF) ON [years]([datesell]) 

DROP INDEX [ClusteredIndex_on_years_636227525068063988] ON [dbo].[ticket2] 

COMMIT TRANSACTION 
GO 
+0

號請看看這張圖,以便更好地理解我的想法http://ybex.com/d/2vnbd727moz9cq5g8uoiispla9j02wp8mmyz8147.html – Ivanoff