Sql-Server
基於其他列的約束
是否可以根據行中的其他值來限制列中允許的值?
例如,我的表:
ID Test_mode Active -- --------- ------ 1 1 Null 2 0 1 3 1 0
如果將 a插入,有沒有辦法改變 to 的
Test_mode
值0``1``Active
要麼
如果
Test_mode
為 1,則不允許插入/更新Active
要麼
如果為 1 並嘗試
Test_mode
插入/更新,則拋出某種錯誤。Active
Active
只能為 NULL、1、0,並且只有 1 和Test_mode
as 0。我希望這是有道理的,如果不讓我知道,我會更新問題。
首先,歡迎來到 dba.stackexchange.com 並感謝您的文章!
是否可以根據行中的其他值來限制列中允許的值。
是的,使用此處描述的CHECK CONSTRAINTS
例子 :
create table myTable (ID int identity(1,1) , Test_mode int , Active int ) go -- Active can only be NULL, 1, 0, AND only 1 with Test_mode as 0. ALTER TABLE myTable WITH CHECK ADD CONSTRAINT ck_active CHECK (active IS NULL OR active IN (1, 0)) go -- some test data insert into myTable (test_mode, Active) values (1, null) insert into myTable (test_mode, Active) values (0, null) insert into myTable (test_mode, Active) values (1, 0) insert into myTable (test_mode, Active) values (0, 1) insert into myTable (test_mode, Active) values (1, 1) select * from myTable -- Is there a way to either change the value of Test_mode to 0 if a 1 is inserted into Active update myTable set Test_mode = case when Active = 1 then 0 else Test_mode end where Active = 1
如果
Test_mode
為 1,則不允許插入/更新 Active –OR– 如果 Test_mode 為 1 並且嘗試插入/更新 Active,則拋出某種錯誤。如此處所述使用 TRY/CATCH