我创建了一个名为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".
我理解错误意味着现有数据违反了我试图添加到表中的检查约束,但为什么?
我该怎么做才能使现有的数据和检查约束不相互冲突?
答案 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}'