2012-09-25 2 views
0

if 조건으로 테이블 A에서 업데이트 할 때 SQL Server 트리거를 구현하여 테이블 B의 행을 업데이트하려고합니다.SQL Server : 'if'조건으로 트리거 업데이트

테이블 A :

id_AA 
status 
desc1 
desc2 

테이블 B :

id_BA 
desc3 
desc4 

논리는 다음과 같이이다 : 당신의 논리에

if user update table A set status == success 
update B: when id_BA == id_AA 
set desc3 = desc1 
desc4 = desc2 
+3

그리고 무엇을 당신이 지금까지 시도 사용을 고려할 수 있습니다 TableB에 대응하는 행이없는 경우? –

+0

이 오류가 발생합니까 아니면 그냥 시작되지 않습니까? – Jesse

답변

2

내가 아니라고 100 % 명확 ,하지만 네가 찾고있는 것 같아. omething이 같은 :

CREATE TRIGGER dbo.TableA_Update 
ON dbo.TableA 
FOR UPDATE 
AS 
BEGIN 
    UPDATE TableB 
    SET  Desc3 = i.Desc1, 
      Desc4 = i.Desc2 
    FROM TableB b 
      INNER JOIN inserted i   
       ON i.ID_AA = b.ID_BA  -- MATCH CRITERIA IN QUESTION 
       AND i.Status = 'success' -- NEW STATUS IS "SUCCESS" 
      INNER JOIN deleted d 
       ON d.ID_AA = i.ID_AA 
       AND d.Status != 'success' -- PREVIOUS STATUS WAS NOT "SUCCESS" 
END 

편집

당신이 MERGE

CREATE TRIGGER dbo.TableA_Update 
ON dbo.TableA 
FOR UPDATE 
AS 
BEGIN 
    ;WITH Updated AS 
    ( SELECT i.ID_AA, i.Desc1, i.Desc2 
     FROM inserted i 
       INNER JOIN deleted d 
        ON d.ID_AA = i.ID_AA 
        AND d.Status != 'success' -- PREVIOUS STATUS WAS NOT "SUCCESS" 
     WHERE i.Status = 'success' 
    ) 
    MERGE INTO TableB USING Updated ON ID_AA = ID_BA 
    WHEN MATCHED THEN 
     UPDATE 
     SET Desc3 = Desc1, 
      Desc4 = Desc2 
    WHEN NOT MATCHED THEN 
     INSERT (ID_BA, Desc3, Desc4) VALUES (ID_AA, Desc1, Desc2); 
END