将CHECK约束添加到已填充的表中

时间:2012-09-27 12:52:08

标签: sql sql-server-2008-r2 check-constraints

我创建了一个名为test的表,其中包含名为code的列:

create table test(  
code char(3) not null);

然后我使用以下数据填充表格:

insert into test values ('A12');
insert into test values ('B23');
insert into test values ('C45');

然后我改变了列,使其成为char(4):

alter table test
alter column code char(4) not null;

然后我在所有现有数据中添加了一个“X”,使其变为4个字符长:

update test
  set code='X'+code
where LEN(code)=3;

到目前为止一直很好,但当我尝试添加检查约束时:

alter table test
add constraint codeCheck check (code like 'A-Z''A-Z''0-9''0-9');

我收到了这个错误:

The ALTER TABLE statement conflicted with the CHECK constraint "codeCheck".

我理解错误意味着现有数据违反了我试图添加到表中的检查约束,但为什么?

我该怎么做才能使现有的数据和检查约束不相互冲突?

3 个答案:

答案 0 :(得分:15)

您的模式语法错误。它应该是

alter table test
add constraint codeCheck check (code like '[A-Z][A-Z][0-9][0-9]');

答案 1 :(得分:0)

因为您的数据与类似的约束不匹配。

尝试

alter table test
     add constraint codeCheck check (code like '[A-Z][A-Z][0-9][0-9]' );

答案 2 :(得分:0)

我不知道它如何与SQL Server一起使用但你的like子句看起来很奇怪。 尝试使用

  

'[A-Z] {2} \ d {2}'