簡體   English   中英

Sql Server - 約束 - 僅當列B為空時允許設置列A,反之亦然

[英]Sql Server - Constraint - Allow to set column A only if column B is null and vice-versa

有沒有辦法在SQL Server 2008中添加一個約束來驗證如果用戶試圖在列A中輸入一個值,它只能在列B為空時反之亦然

  • 如果A為NULL,則B可以具有值
  • 如果B為NULL,則A可以有值
  • A和B不能同時具有價值

像這樣的東西:

ALTER TABLE foo WITH CHECK ADD
    CONSTRAINT CK_Foo_reason CHECK (
        ColA IS NOT NULL AND ColB IS NULL
        OR
        ColA IS NULL AND ColB IS NOT NULL
        )

編輯:問題更新后

這取決於在這種情況下是否允許兩列都為NULL

 
 
 
  
   ColA IS NULL OR ColB IS NULL
 
  

編輯2:對於3列,其中一列必須為NOT NULL

我擔心沒有聰明的褲子回答。 我添加了空格,希望能讓它更清晰

ALTER TABLE foo WITH CHECK ADD
    CONSTRAINT CK_Foo_reason CHECK (
        ColA IS NOT NULL AND ColB IS NULL     AND ColC IS NULL
        OR
        ColA IS NULL     AND ColB IS NOT NULL AND ColC IS NULL
        OR
        ColA IS NULL     AND ColB IS NULL     AND ColC IS NOT NULL
        )

這似乎對我有用:

CREATE TABLE dbo.Test_Constraint
(
    a INT NULL,
    b VARCHAR(10) NULL,
    CONSTRAINT Test_Constraint_CHK CHECK (a IS NULL OR b IS NULL)
)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM