两列之间的列之一应为NOT NULL.如何在架构中强制执行?

Sil*_*ent 20 sql-server sql-server-2008

我有一张下面的表格

CREATE TABLE MyTable  
(  
    ID                INTEGER DEFAULT(1,1),      
    FirstIdentifier   INTEGER NULL,    
    SecondIdentifier  INTEGER NULL,  
  --.... some other fields .....    
)   
Run Code Online (Sandbox Code Playgroud)

现在插入值时,FirstIdentifier和SecondIdentifier之间的列之一应为NOT NULL.无论如何通过架构强制执行它?

小智 26

使用CHECK约束可以实现这一点:

CHECK (FirstIdentifier IS NOT NULL OR SecondIdentifier IS NOT NULL)
Run Code Online (Sandbox Code Playgroud)

虽然CHECK约束是表的一部分(因此是"模式"?),但它们可能不符合所需的定义.上面的CHECK不是互斥的,但可以改为这样.

快乐的编码.

  • 派对有点晚了,但是如果允许其中一个列为NULL,则CHECK约束可以是CHECK((FirstIdentifier IS NOT NULL或SecondIdentifier IS NOT NULL)AND([FirstIdentifier] IS NULL OR [SecondIdentifier] IS空值)) (4认同)
  • 这强制执行至少一个字段不为空.我对这个问题的解释是,一个人应该是非空的. (2认同)