2015-10-19 40 views
0

這是涉及CHECK語句的兩部分問題,在我的第一個CHECK中由於某種原因它可以工作,但實際上允許將 null插入到字段中......任何想法如何解決此問題?在我的第二個CHECK中,它很簡單並且不起作用。它允許插入任何東西。添加一個CONSTRAINT SQL CHECK問題

ALTER TABLE table_name ADD (CONSTRAINT CK_CON (name IN ('Jon','Bill','Ted','Ron','Jeff'))); 

ALTER TABLE table_name ADD (CONSTRAINT CK_NAME CHECK(
     (name='John') OR (name='Mary') OR 
      (name='Jane') OR (name= 'Bruce') OR (name= ''))); 
+3

添加一個NOT NULL約束。 – jarlh

+3

在WHERE子句中,爲了匹配,整個謂詞必須是「TRUE」。在CHECK約束中,謂詞不需要爲'FALSE'。在這種情況下,區別在於「NULL」以及SQL具有三值邏輯,即在NULL出現時有時產生「UNKNOWN」的事實。 –

回答

0

ALTER TABLE表名ADD(CONSTRAINT CK_CON(名稱( '喬恩', '比爾', '泰德', '羅恩', '傑夫')));

ALTER TABLE表名ADD(CONSTRAINT CK_NAME CHECK( (名稱= '約翰')或(NAME = '瑪麗')或 (NAME = '簡')或(NAME = '李小龍')));

能證明這一點

+0

第一個約束是否接受NULL值? – Josh123

+0

我這麼認爲,但證明了這一點 – Jota

+0

當你創建一個表,並把約束,我認爲如此,但我不知道。如果沒有,你可以證明爲restrinctions – Jota

3

對於第一個問題,更改列namenot null

對於第二個問題

嘗試做這樣的方式

ALTER TABLE table_name ADD (CONSTRAINT CK_NAME CHECK(
     (name='John') OR (name='Mary') OR 
      (name='Jane') OR (name= 'Bruce'))); -- you have to remove this OR (name= '') 
+0

我得到錯誤 - USER.CK_NAME - 違反檢查約束。不知道爲什麼? – Josh123

+0

,因爲您插入了與您提供的檢查相關的值名稱。你必須清理你的數據或修改你的檢查取決於你想要的 – Moudiz