다음을 감안할 때
-- table ddl
create table dbo.f_word(
sentence_id int NULL,
sentence_word_id int NULL,
word_id int NULL,
lemma_id int NULL,
source_id int NULL,
part_of_speech_id int NULL,
person_id int NULL,
gender_id int NULL,
number_id int NULL,
tense_id int NULL,
voice_id int NULL,
mood_id int NULL,
case_id int NULL,
degree_id int NULL,
citation nvarchar(100) NULL
);
-- create partition function
create partition function pf_f_word_source_id (int)
as range left for values
(
1,2,3,4,5,6,7,8,9,10,11,12,13,14,
15,16,17,18,19,20,21,22,23
);
-- create the partition scheme
create partition scheme ps_f_word as partition pf_f_word_source_id to
(
[primary],[primary],[primary],[primary],[primary],[primary],[primary],[primary],[primary],
[primary],[primary],[primary],[primary],[primary],[primary],[primary],[primary],[primary],
[primary],[primary],[primary],[primary],[primary],[primary]
);
-- partition the index
create unique clustered index cix_fword on dbo.f_word
(
source_id,
sentence_id,
sentence_word_id,
word_id,
lemma_id,
part_of_speech_id,
person_id,
gender_id,
number_id,
tense_id,
voice_id,
mood_id,
case_id,
degree_id
)
on ps_f_word (source_id);
-- swapin table ddl
create table dbo.f_word_swapin(
sentence_id int NULL,
sentence_word_id int NULL,
word_id int NULL,
lemma_id int NULL,
source_id int NULL,
part_of_speech_id int NULL,
person_id int NULL,
gender_id int NULL,
number_id int NULL,
tense_id int NULL,
voice_id int NULL,
mood_id int NULL,
case_id int NULL,
degree_id int NULL,
citation nvarchar(100) NULL
) on [primary];
-- create the same index on the swapin table
create unique clustered index cix_fword_swapin on dbo.f_word_swapin
(
source_id,
sentence_id,
sentence_word_id,
word_id,
lemma_id,
part_of_speech_id,
person_id,
gender_id,
number_id,
tense_id,
voice_id,
mood_id,
case_id,
degree_id
);
-- add check constraints WITH CHECK
ALTER TABLE dbo.f_word_swapin
WITH CHECK
ADD CONSTRAINT ck_f_word_swapin_lb
CHECK ( source_id > 12);
ALTER TABLE dbo.f_word_swapin
WITH CHECK
ADD CONSTRAINT ck_f_word_swapin_ub
CHECK ( source_id <= 13);
그런 다음 데이터를 다음과 같이 이동하십시오.
-- switch data OUT of the partitioned table
ALTER TABLE dbo.f_word
SWITCH PARTITION 13 TO dbo.f_word_swapin;
-- attempt to switch data back IN
ALTER TABLE dbo.f_word_swapin
SWITCH TO dbo.f_word PARTITION 13;
아래는 동일한 테이블 구조를 확인하기위한 "스크립트 테이블 As ... CREATE"DDL입니다.
/****** Object: Table [dbo].[f_word_swapin] Script Date: 9/10/2014 10:01:01 AM ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
CREATE TABLE [dbo].[f_word_swapin](
[sentence_id] [int] NULL,
[sentence_word_id] [int] NULL,
[word_id] [int] NULL,
[lemma_id] [int] NULL,
[source_id] [int] NULL,
[part_of_speech_id] [int] NULL,
[person_id] [int] NULL,
[gender_id] [int] NULL,
[number_id] [int] NULL,
[tense_id] [int] NULL,
[voice_id] [int] NULL,
[mood_id] [int] NULL,
[case_id] [int] NULL,
[degree_id] [int] NULL,
[citation] [nvarchar](100) NULL
) ON [PRIMARY]
/****** Object: Table [dbo].[f_word] Script Date: 9/10/2014 10:09:43 AM ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
CREATE TABLE [dbo].[f_word](
[sentence_id] [int] NULL,
[sentence_word_id] [int] NULL,
[word_id] [int] NULL,
[lemma_id] [int] NULL,
[source_id] [int] NULL,
[part_of_speech_id] [int] NULL,
[person_id] [int] NULL,
[gender_id] [int] NULL,
[number_id] [int] NULL,
[tense_id] [int] NULL,
[voice_id] [int] NULL,
[mood_id] [int] NULL,
[case_id] [int] NULL,
[degree_id] [int] NULL,
[citation] [nvarchar](100) NULL
)
GO
스위칭 출력은 정상적으로 작동합니다. 스위치 인은 다음과 같은 오류를 생성합니다.
메시지 4972, 수준 16, 상태 1, 줄 1 ALTER TABLE SWITCH 문이 실패했습니다. 소스 테이블 'greek.dbo.f_word_swapin'의 점검 제한 조건 또는 파티션 함수는 대상 테이블 'greek.dbo.f_word'의 점검 제한 조건 또는 파티션 함수가 허용하지 않는 값을 허용합니다.
달리는:
select target_partition_id = $PARTITION.pf_f_word_source_id(source_id),
*
from dbo.f_word_swapin;
모든 데이터가 파티션 13으로 되돌아 가는지 확인합니다.
나는 파티션에 익숙하지 않아서 일을 잘못하고 있다고 확신하지만, 그것이 무엇인지 모릅니다.
점검 제한 조건이 WITH NOCHECK으로 작성된 테이블 중 하나 이상에서 발생하는 경우에도 발생할 수 있습니다.