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

データが同様の制約と一致しないためです。

試す

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 に答える