Sql-Server
創建一個約束,使得必須填寫兩個欄位中的一個
我在 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));