2015-10-19 76 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