2016-08-03 23 views
0

は、次の表にチェック制約を追加しようとすると:チェック制約

CREATE TABLE TEST_A 
(
    NAME VARCHAR(55), 
    Country VARCHAR(50) 
) 

ALTER TABLE TEST_A 
    ADD CONSTRAINT CK_GBR_TO_IND 
     CHECK (Country = CASE WHEN 'GBR' THEN 'IND' ELSE COUNTRY END); 

私は、次のようなエラーになっています:

Msg 4145, Level 15, State 1, Line 2
An expression of non-boolean type specified in a context where a condition is expected, near 'THEN'.

+1

挿入する値を変更することはできませんチェック制約内にある。代わりにトリガーを使用することもできます。 –

+0

なぜトリガーを使用しないのですか? – Sami

+0

国番号= GBR、国番号= IND – Sami

答えて

2

を代わりにトリガーを試してみてください。.. You Can't use Check Constraint to change values ...

create trigger trg_test 
on yourtable 
instead of insert 
as 
Begin 

insert into yourtable--assuming it has only country column 
select case when country='GBR' then 'IND' 
else country end 
from Inserted 

end 
+0

次のエラーで失敗します。メッセージ4145、レベル15、状態1、行8 条件が期待されるコンテキストで指定された非ブール型の式で、 ')'の近くに指定します。 – Sharktooth

+0

@Sharktooth:トリガーを使用した例を参照 – TheGameiswar

+0

トリガーが唯一の方法です。 – Sharktooth

1
ALTER TABLE TEST_A ADD CONSTRAINT CK_GBR_TO_IND 
CHECK (Country IN('GBR', 'IND')); 
+0

の場合は、挿入後にトリガーを使用できますが、挿入された行にINDがGBRの場合にのみレコード値を変更したい場合は、 – Sharktooth

+0

@Sharktooth:GBRとINDを持つレコードを禁止したいのですか? – TheGameiswar

+0

@TheGameiswarいいえ、挿入する行にCountry = GBRがある場合は、代わりに 'IND'を挿入します。 – Sharktooth