가장 좋은 방법은 마스터 테이블에서 해당하는 이전 행의 하위를 가져와 하위 테이블에 삽입하는 INSERT 트리거를 사용하는 것입니다.
나는 트리거에서 매우 녹슨 해요,하지만이 같은 : 트리거가 발생했을 때
CREATE TRIGGER tr_master ON master FOR AFTER INSERT AS
INSERT INTO childtable(masterid, childvalue)
SELECT inserted.id, oldchildren.childvalue
FROM inserted INNER JOIN childtable oldchildren
ON oldchildren.masterid = inserted.copiedfromid
)
, 때문에 현재 삽입 한 레코드 (들) 복사 된 마스터 기록 "알고"하지 않습니다 from, 당신은 마스터 테이블의 칼럼에있는 원래 레코드의 프라이 머리 키를 추적 할 필요가있을 것이다 (나는 여기에서 "copiedfromid"로 레이블을 붙였다).
"삽입 됨"은 해당 트랜잭션에서 마스터 테이블에 삽입되는 모든 행을 포함하는 트리거 내에서 사용 가능한 특수 테이블입니다. 자식 테이블의 외래 키가 마스터 테이블과 참조 무결성을 적용한다고 가정하기 때문에 "INSERT 후에"대신 "FOR INSTER INSERT"를 사용했습니다. 삽입이 실제로 발생한 후에 만 트리거해야한다고 생각합니다. .
이 트리거는 어디에서 "oldchildren"정보를 가져 옵니까? –
내가 명료하게하기 위해 "노인"으로 앨리어스 처리 한 하위 테이블에서. "copiedfromid"ID에 속한 하위 항목을 찾고 새로운 복사 된 각 레코드를 제공해야합니다. – richardtallent
잘 삽입하면 새로운 삽입물인지 복사 과정인지 알 수 있습니다. 새로운 인서트를하면 트리거가 올바르게 실행됩니다. – Aneef