2017-03-15 1 views
3

에 특정 열 값을 변경하는 방법을 나는 세 개의 테이블 캐스케이드

Company 
Department 
Cost-centers 

을 가지고 있고 그들은 일대 다 관계를 가지고있다. 내 회사처럼 여러 부서가있을 수 있습니다. 우리 회사에는 열 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

당신은, 회사 테이블에 대해 이런 식으로 뭔가를 갱신 트리거를 만들어야합니다.

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 
아래