Constraint

根據父表對子表添加欄位約束

  • February 19, 2016

我需要將約束添加到子表的所有條目中的特定欄位,其中外鍵指向父表中的單行。最好的方法是什麼?

例如,我的父表有

   Id Money Name
   -- ----- ----
    1  30    xyz
    2  40    abc

和引用這個的表

   Id Cost Person
   -- ---- ------
    1  10    1
    2  10    1
    3  20    2

Person是外鍵,我需要根據 來設置約束CostMoney例如,所有的總和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 觸發器來查詢另一個表並在它不符合條件時立即刪除該行。然而,這是一個非常次優的選擇。

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