由于检查约束,变更表切换语句失败

问题描述 投票:0回答:1

我有一个将平面文件加载到3个临时表中并切换到分区表的情况。

当我尝试从暂存表切换到分区表时,出现以下错误。你能帮忙吗?

这里是文件组名称

PRIMARY
FG1
FG2
FG3
FG4

这是分区模式,

CREATE PARTITION FUNCTION PAR_FN (bigint) AS RANGE LEFT FOR VALUES (1,2,3,4)

CREATE PARTITION SCHEME PAR_SCHEMA AS PARTITION PAR_FN TO (
FG1, FG2, FG3, FG4, PRIMARY
)

CREATE TABLE TEMP1
       (O_ORDERKEY bigint NOT NULL,
        O_CUSTKEY  int NOT NULL)
ON PAR_SCHEMA (O_ORDERKEY)

CREATE TABLE TEMP2
       (O_ORDERKEY bigint NOT NULL,
        O_CUSTKEY int NOT NULL)
ON PAR_SCHEMA (O_ORDERKEY)

CREATE TABLE TEMP3
       (O_ORDERKEY bigint not null,
        O_CUSTKEY int not null)
ON PAR_SCHEMA (O_ORDERKEY)

create table TEMP4
       (O_ORDERKEY bigint NOT NULL,
        O_CUSTKEY int NOT NULL)
ON PAR_SCHEMA (O_ORDERKEY)

ALTER TABLE TEMP1 WITH CHECK ADD CONSTRAINT check_TEMP1 
CHECK (O_ORDERKEY <=N'1')

ALTER TABLE TEMP2 WITH CHECK ADD CONSTRAINT check_TEMP2 
CHECK (O_ORDERKEY >N'1' AND O_ORDERKEY <=N'2')

ALTER TABLE TEMP3 WITH CHECK ADD CONSTRAINT check_TEMP3 
CHECK (O_ORDERKEY >N'2' AND O_ORDERKEY <=N'3')

ALTER TABLE TEMP4 WITH CHECK ADD CONSTRAINT check_TEMP4 
CHECK (O_ORDERKEY >N'3' AND O_ORDERKEY <=N'4')

最后是切换分区,

ALTER TABLE TEMP1  SWITCH TO MAIN PARTITION 1;
ALTER TABLE TEMP2  SWITCH TO MAIN PARTITION 2;
ALTER TABLE TEMP3  SWITCH TO MAIN  PARTITION 3;
ALTER TABLE TEMP4  SWITCH TO MAIN  PARTITION 4;

主表和登台表之间的唯一区别是,登台表的默认值为O_ORDERKEY。 (即,温度1代表1,温度2代表2,依此类推)

sql sql-server-2008-r2 database-partitioning
1个回答
0
投票

用于在其间切换数据的表的定义必须完全相同(requirements)。与表定义的任何偏差都将阻止切换数据。

在切换时,将不会触发任何处理(这就是切换如此有用的原因,并且数据仍必须遵守所有约束。

遵守分区切换条件的唯一方法是使用完全相同的DDL脚本生成两个表。仅表名及其约束和索引的名称必须不同。

© www.soinside.com 2019 - 2024. All rights reserved.