Ognacの雑感

木漏れ日々

目次

Blog 利用状況

書庫

ギャラリ

Check制約を無効にして、再度有効にするときの動作の違い~

前回、頂いたコメントで、Sql server のNull値の扱いで、軽いショックを受けました。そのついでに、気になることができたので確認してみました。
性別項目に Check制約を付けいてるとき、
    性別 nchar(1)  CONSTRAINT C1  check (性別 in ( 'F','M'))
大量に入力するとき、Check制約を外したい要求があります。
 Oracle だと
  ALTER TABLE test  DISABLE CONSTRAINT  C1;
  ALTER TABLE test  ENABLE  CONSTRAINT  C1;
で操作できます。
 
 SQL Serverだと
  ALTER TABLE test NOCHECK CONSTRAINT C1;
  ALTER TABLE test CHECK CONSTRAINT C1;
で操作できます。

 しかし、チェックを無効にして、 'F','M' 以外の値を挿入して、再度、制約を有効にしたときの動作が異なることに気付きました。

Oracleは、制約の復活時に

   ENABLE CONSTRAINT  C1
                        *
   行2でエラーが発生しました。:
   ORA-02293: (SCOTT.C1)を検証できません - チェック制約違反です。
となって、復活が拒否されます。

ところろか、SQL Serverのほうは、違反する行は温存したまま、制約復活できました。
うーん。こんなところにも、方言仕様があったとは。
異なるRDBだから、方言の問題ではなく、たまたま、同じ動きをする部分もある。と認識したほうがいいようですね。

特定RDBに依存した作りにしてなくても、知らぬ間に、依存仕様を使ってことも多いようで、一度構築した、RDBシステムは、異なるRDBに乗せ換えるのは、無謀なのかも知れませんね。

 

参考:  SQL Serverでのソース

drop table test;
create table test
(
    id   nchar(1)
  , 名前 nvarchar(20)
  , 性別 nchar(1)  CONSTRAINT C1  check (性別 in ( 'F','M'))
);

ALTER TABLE test NOCHECK CONSTRAINT C1;

insert into test (id , 名前 ,性別) values ('a' , 'AA' , 'F');
insert into test (id , 名前 ,性別) values ('b' , 'BB' , 'M');
insert into test (id , 名前 ,性別) values ('c' , 'CC' , 'a');
insert into test (id , 名前 ,性別) values ('d' , 'DD' , 'b');

ALTER TABLE test CHECK CONSTRAINT C1;

insert into test (id , 名前 ,性別) values ('e' , 'EE' , 'e');
select * from test;


Oracleでのソース

drop table test;
create table test
(
    id   nchar(1)
  , 名前 nvarchar2(20)
  , 性別 nchar(1)  constraint C1  check ( 性別 in ( 'F','M'))
);

ALTER TABLE test
  DISABLE CONSTRAINT  C1
;


insert into test (id , 名前 ,性別) values ('a' , 'AA' , 'F');
insert into test (id , 名前 ,性別) values ('b' , 'BB' , 'M');
insert into test (id , 名前 ,性別) values ('c' , 'CC' , 'a');
insert into test (id , 名前 ,性別) values ('d' , 'DD' , 'b');

ALTER TABLE test
  ENABLE CONSTRAINT  C1
;

insert into test (id , 名前 ,性別) values ('e' , 'ee' , 'z');
select * from test;

投稿日時 : 2008年6月25日 1:08

Feedback

# ditSzCmIhkP 2011/12/27 18:59 http://www.smithtitleservices.com

It's straight to the point! You could not tell in other words! :D

# kzItIHMzaD 2012/01/07 8:41 http://www.luckyvitamin.com/m-135-country-life

Are you interested in webmaster`s income?!...

# re: Internet Explorer 11 で、右クリックしたときに表示されるメニューで、Bingではなく、Google をデフォルトの検索エンジンとして設定するには? 2017/12/08 18:13 meadc

http://www.ups-tracking.us ups shipping
http://www.hermesoutlet.co/ hermes outlet bag
http://www.prada-outlet-online.com/ prada outlet online store
http://www.louis--vuitton.co louis vuitton on sale
http://www.jimmy-choo.com.au
me adc12.8

# ウブロコピー 2018/02/03 10:04 hqyhat@excite.co.jp

ルイヴィトン - N級バッグ、財布 専門サイト問屋
弊社は販売LOUIS VUITTON) バッグ、財布、 小物類などでございます。
弊社は「信用第一」をモットーにお客様にご満足頂けるよう、
送料は無料です(日本全国)! ご注文を期待しています!
下記の連絡先までお問い合わせください。
是非ご覧ください!
激安、安心、安全にお届けします.品数豊富な商
商品数も大幅に増え、品質も大自信です
100%品質保証!満足保障!リピーター率100%!

# FDPrnsFULbgGaUOsct 2022/04/19 11:48 johnanz

http://imrdsoacha.gov.co/silvitra-120mg-qrms

タイトル
名前
Url
コメント