Constraint
根據父表對子表添加欄位約束
我需要將約束添加到子表的所有條目中的特定欄位,其中外鍵指向父表中的單行。最好的方法是什麼?
例如,我的父表有
Id Money Name -- ----- ---- 1 30 xyz 2 40 abc
和引用這個的表
Id Cost Person -- ---- ------ 1 10 1 2 10 1 3 20 2
這
Person
是外鍵,我需要根據 來設置約束Cost
,Money
例如,所有的總和cost
應始終小於或完全等於總和Money
。
CHECK 約束只能引用它所附加的表或列。作為插入到引用表中的查詢的一部分,您必須驗證這些值。像這樣的東西:
DECLARE @Cost INT DECLARE @PersonID INT INSERT INTO ChildTable ( cost,person ) SELECT @Cost ,@PersonID FROM ParentTable PT WHERE pt.id = @PersonID AND ((SELECT SUM(cost) FROM ChildTable CT WHERE CT.id = PT.id) + @Cost) < PT.money
您還可以創建一個 DELETE 觸發器來查詢另一個表並在它不符合條件時立即刪除該行。然而,這是一個非常次優的選擇。