Sql-Server

創建一個約束,使得必須填寫兩個欄位中的一個

  • August 22, 2019

我在 SQL Server 中有一個表,使用者需要在其中兩列中的任意一列中輸入數據。也就是說,兩者之一必須輸入數據,但同時我不想讓使用者在兩列中輸入。要麼是要麼,但一個是必須的。

您需要使用檢查約束:

create table kevin
(
 one   integer, 
 other integer,
 constraint only_one_value 
       check (        (one is null or other is null) 
              and not (one is null and other is null) )
);

這可確保至少其中一列具有值,而不是兩者都具有值。

如果這些是varchar列,您可能還需要檢查空值 ( '')。為此nullif(),將值轉換為null是否等於函式的第二個參數。

create table kevin
(
 one   integer, 
 other integer,
 constraint only_one_value 
       check (        (nullif(one,'') is null or nullif(other,'') is null) 
              and not (nullif(one,'') is null and nullif(other,'') is null) )
);

像這樣?

create table #t (col1 int, col2 int)
go

alter table #t with check add 
  constraint ck_only_one check ((col1 is null and col2 is not null) or (col2 is null and col1 is not null)); 

引用自:https://dba.stackexchange.com/questions/190505