只需要多列中的一列不是空的

时间:2014-01-15 17:56:35

标签: sql sql-server

对于措辞严厉的标题道歉,但我无法准确表达我的意思,这可能就是为什么我找不到与Google有关的任何内容。

简单地说,想象一下这样一种情况,即在一个包含图片和相关元数据的数据库中有一个名为Image的表。照片可以是客户,他们的汽车或在汽车上进行的特定修理。有一些名为Client,Car和Repair的表,每个表都有自己唯一的ID列。

在Image表中,有一个名为ClientID的列,一个名为CarID的列和一个名为RepairID的列,它将每个图像记录链接到客户端,汽车和/或修复。问题是,图像可能与客户和汽车有关,但不是维修,汽车和维修,但不是客户,或只是这三者中的任何一个。换句话说,在一列,两列或三列中可能有一个值,但必须至少有一列。只要一个不是NULL,其他两个就可以。

有没有办法在MSSQL中使用约束(或任何其他方法)来实现这一点?

希望下面的示例图表能说明我在说什么。 enter image description here

1 个答案:

答案 0 :(得分:2)

Image表上创建一个如下所示的约束:

Car is not null or Client is not null or Repair is not null   

DDL:

ALTER TABLE [dbo].[Image]  WITH CHECK ADD  CONSTRAINT [CK_Image_CarClientRepair] CHECK  (Car is not null or Client is not null or Repair is not null)