9

我创建了一个名为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".

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

以及如何使现有数据和检查约束不相互冲突?

4

3 回答 3

18

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

alter table test
add constraint codeCheck check (code like '[A-Z][A-Z][0-9][0-9]');
于 2012-09-27T12:54:27.353 回答
1

因为您的数据不符合 like 约束。

尝试

alter table test
     add constraint codeCheck check (code like '[A-Z][A-Z][0-9][0-9]' );
于 2012-09-27T12:54:03.303 回答
0

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

'[AZ]{2}\d{2}'

于 2012-09-27T13:01:50.083 回答