2017-03-15 8 views
3

上の特定の列の値を変更する方法私は3つのテーブル カスケード

Company 
Department 
Cost-centers 

を持っており、彼らは1対多の関係を持っています。私の会社のように複数の部門があるかもしれません。私の会社には、 is_activeという欄があります。

その列をアクティブから非アクティブに変更する場合、その特定の会社の関連部門は非アクティブ(削除されない)であり、特定の部門に関連付けられたコストセンターも非アクティブに変更する必要があります。

私はカスケード削除を使用していますが、削除したくありません。その特定の列をアクティブから非アクティブに更新したいだけです。同じように、それはCost_Centersを更新し、

if update(is_Active) begin 
    update Department set is_Active=i.is_Active 
     from Department as d inner join inserted as i 
     on d.CompanyID = i.ID 
     where d.CompanyID = i.ID and d.is_Active<>i.is_Active 
end 

と部門内の別のトリガー:

答えて

2

あなたは、会社のテーブルのために、このような何かをUPDATEトリガーを作成する必要があります。

0

あなたは

IF EXISTS (SELECT name FROM sys.objects 
     WHERE name = 'updateOtherColumns' AND type = 'TR') 
    DROP TRIGGER updateOtherColumns; 
GO 
CREATE TRIGGER updateOtherColumns 
ON Company 
AFTER UPDATE 
AS 
IF UPDATE(is_active) 
BEGIN 
    UPDATE D 
    SET D.is_active= C.is_active 
    FROM Departments D INNER JOIN Company C 
    ON D.id=C.dept_id and D.is_active <>C.is_active 
    --first update departments and then cost-centers 
    UPDATE CC 
    SET CC.is_active= D.is_active 
    FROM Departments D INNER JOIN Cost_Centers CC 
    ON D.cost_center_id=CC.id and D.is_active <>CC.is_active 
END 

GO 
以下のようなもののためにトリガーを使用することができます