2014-01-15 46 views
0

對措辭不佳的標題抱歉,但我無法正確表達我的意思可能是爲什麼我找不到與Google有關的任何內容。要求只有多列中的一列不爲空

簡而言之,設想一種情況,即在包含圖片和相關元數據的數據庫中具有名爲Image的表格。照片可以是客戶,他們的汽車或在車上進行的特定修理。有一些稱爲客戶,汽車和修理的表,每個表都有自己的唯一ID列。

在Image表中,有一個名爲ClientID的列,一個名爲CarID的列和一個名爲RepairID的列,該列將每個圖像記錄鏈接到客戶端,汽車和/或修理。問題是,一張圖片可能與客戶和汽車有關,但不涉及維修,汽車和維修,而不是客戶,或者這三者中的任何一個。換句話說,在一列,兩列或三列中可能存在一個值,但必須是至少一列中的一列。只要其中一個不是NULL,另外兩個就可以。

有沒有辦法在MSSQL中使用約束(或任何其他方法)來實現這一點?

希望下面的示例圖將說明我在說什麼。 enter image description here

回答

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) 
+0

這看起來很簡單!您是否意識到這可能會造成任何特定的性能問題? –

+1

這幾乎沒有開銷,這是一個微不足道的檢查。 – RedFilter