2016-08-03 27 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

如果country = GBR,則可以在插入後使用觸發器,然後設置country = 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

但是,只有當插入的行的GBR爲IND時,所有其他記錄集應該照常插入時,我想更改記錄值。 – Sharktooth

+0

@Sharktooth:你是否想要防止有GBR和IND的記錄 – TheGameiswar

+0

@TheGameiswar否,如果插入的行有Country = GBR,則插入'IND',而不是如何工作。 – Sharktooth