2016-10-21 3 views
-1

하나의 (원본) 테이블에서 다른 (대상) 테이블 (다른 데이터베이스의 테이블)으로 데이터를 자동으로 전송하는 삽입 및 업데이트를위한 트리거를 만드는 방법은 무엇입니까? 트리거는 소스 테이블에서 변경 될 때마다 데이터를 전송해야합니다. 누구든지이 작업을 수행하는 방법을 알고 있습니까? 이 같은데이터 삽입 및 업데이트를위한 트리거를 만드는 방법

+0

그리고 무엇 삭제에 할? 그리고 어떻게 변화를 저장할 것입니까? 정확한 사본이 필요한 경우보기를 사용하는 것이 좋습니다. 너무 넓어서 제발, 정교 해주세요. – gofr1

답변

1

시도 뭔가 :

USE DB1; 
GO 

CREATE TRIGGER dbo.table1__AIU 
    ON dbo.table1 
    AFTER INSERT, UPDATE 
AS BEGIN 
    SET NOCOUNT ON; 

    DECLARE @operation char(1) = -- [I]nsert, [U]pdate, u[N]known 
     CASE 
      WHEN EXISTS(SELECT * FROM inserted) THEN 
       CASE WHEN EXISTS(SELECT * FROM deleted) THEN 'U' ELSE 'I' END 
      ELSE 'N' 
     END; 

    IF @operation = 'N' 
     RETURN; 

    IF @operation = 'I' 
     INSERT INTO DB2.dbo.Table2(id, b) 
      SELECT inserted.id, inserted.b 
      FROM inserted; 
    ELSE 
     UPDATE t2 
      SET b = inserted.b 
      FROM DB2.dbo.Table2 t2 
      INNER JOIN inserted i ON t2.id = inserted.id; 
END; 
GO 
+1

가상 테이블'inserted'와'deleted'는 배치 삽입/갱신/삭제를 위해 여러 행을 포함 할 수 있습니다. 테이블에 하나의 행만 있다고 가정하기 때문에 작성한 것은 올바르지 않습니다. 따라서 이것은 일괄 삽입/업데이트/삭제에 대해 올바르지 않을 것입니다. 또한 트리거의 끝에 삽입 및 업데이트 문이 올바르지 않습니다. 그렇게 쓰지는 못합니다. insert 문은 VALUES 절의 inserted.XXX를 참조 할 수 없으며 update 문은 FROM 절에 삽입 된 테이블을 가지지 않고 inserted.XXX를 참조 할 수 없습니다. –

+0

@TT, 예, 당신 말이 맞아요, 서둘러 요. (대답이 바뀌 었습니다. 고마워요. –

+0

맞아요. –

관련 문제