2016-05-08 4 views
0

SQL Server 2012で次のスクリプトを作成しましたが、制約に失敗しました。SQL Serverスイッチクラスタ化テーブル

私は20,000 000行のテーブルを持っています。 私はパーティションと同じインデックスと同じテーブルを作成したが、私は テーブルを切り替えたときに、SQL Serverはここ

を失敗した私のコードです:

CREATE DATABASE test 
USE test 

create Partition Function 
[PF_Table_Log] ([DATETIME2](3)) As Range left For VALUES 
('2016-04-05 00:00:00.000','2016-04-06 00:00:00.000', 
'2016-04-07 00:00:00.000','2016-04-08 00:00:00.000') 



Create Partition Scheme PS_Table_Log_Datetime 
As Partition [PF_Table_Log] 
All To ([Primary]); 


create TABLE [Log](
[LogId] [BIGINT] IDENTITY(1,1) NOT NULL, 
[ServiceInstanceId] [UNIQUEIDENTIFIER] NULL, 
[ServiceId] [UNIQUEIDENTIFIER] NOT NULL, 
[Component] [NVARCHAR](100) NULL, 
[MachineName] [NVARCHAR](50) NULL, 
[Datetime] [DATETIME2](3) NOT NULL, 
[Severity] [INT] NOT NULL, 
[LogText] [NVARCHAR](max) NULL, 
[MessageId] [UNIQUEIDENTIFIER] NULL, 
[MessageRole] [INT] NULL 
) ON [PRIMARY] 

GO 

CREATE CLUSTERED INDEX [PK_Log] ON [Log] 
(

[LogId] ASC, 
[datetime] ASC 

)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, SORT_IN_TEMPDB = OFF, 
DROP_EXISTING = OFF, ONLINE = OFF, ALLOW_ROW_LOCKS = ON,ALLOW_PAGE_LOCKS=ON)    
GO 


create TABLE [Log_new1](
[LogId] [BIGINT] IDENTITY(1,1) NOT NULL, 
[ServiceInstanceId] [UNIQUEIDENTIFIER] NULL, 
[ServiceId] [UNIQUEIDENTIFIER] NOT NULL, 
[Component] [NVARCHAR](100) NULL, 
[MachineName] [NVARCHAR](50) NULL, 
[Datetime] [DATETIME2](3) NOT NULL, 
[Severity] [INT] NOT NULL, 
[LogText] [NVARCHAR](max) NULL, 
[MessageId] [UNIQUEIDENTIFIER] NULL, 
[MessageRole] [INT] NULL 
) ON PS_Table_Log_Datetime (datetime) 
GO 


CREATE CLUSTERED INDEX [PK_Log] ON [Log_new1] 
(
[LogId] ASC,[Datetime] asc 
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, SORT_IN_TEMPDB = OFF, 
) ON PS_Table_Log_Datetime ([Datetime]) 




ALTER TABLE [Log] SWITCH TO [Log_new1] PARTITION 5 

答えて

0

「私は同じインデックスと同じテーブルを作成しましたパーティションを使用していますが、 がテーブルを切り替えると、SQL Serverは失敗しました。 "

このステートメントはスクリプトと一致しません。テーブルLogは分割されていませんが、Log_new1です。同じパーティションスキームを使用してLogをパーティション化するか、ターゲットパーティションの境界に一致するLogテーブルdatetimeカラムにチェック制約を作成する必要があります。最後のパーティションに必要なチェック制約の定義は、

ALTER TABLE Log ADD CONSTRAINT CK_Log_Datetime CHECK (Datetime > '2016-04-08 00:00:00.000'); 
です。
関連する問題