代码之家  ›  专栏  ›  技术社区  ›  Fredou

对于允许空值的2个字段,如何使一个约束至少必须填充一个?

  •  1
  • Fredou  · 技术社区  · 15 年前

    为了简化这一点,让我们使用该表:

     table1
     -------------
     id unique primary int
     myVal1 int null (fk)
     myVal2 int null (fk)
     myData int not null
    

    在这个表上创建一个约束以便只填充一个值的最佳方法是什么?

    这是可行的:

    insert into table1 (myval1,myData) values (1,234)
    insert into table1 (myval2,myData) values (1,123)
    

    这些将 工作:

    insert into table1 (myData) values (234)
    insert into table1 (myVal1,myval2,myData) values (1,2,123)
    
    1 回复  |  直到 15 年前
        1
  •  1
  •   KM.    15 年前

    尝试使用检查约束:

    CREATE TABLE dbo.Table1
        (
        rowID int NOT NULL primary key identity(1,1),
        myVal1 int NULL,
        myVal2 int NULL,
        myData int NOT NULL
        )  ON [PRIMARY]
    GO
    ALTER TABLE dbo.Table1 ADD CONSTRAINT
        CK_Table1_myVal1_or_myVal2 CHECK ((myVal2 IS NOT NULL AND myVal1 IS NULL) OR (myVal2 IS NULL AND myVal1 IS NOT NULL))
    GO