La meilleure option consiste à utiliser un déclencheur INSERT sur votre table principale qui obtient les enfants de la ligne précédente correspondante et les insère dans la table enfant.
Je suis très rouillé à déclencheurs, mais quelque chose comme ceci:
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
)
Depuis, lorsque le déclencheur se produit, il ne « connaît » qui enregistrent maître l'enregistrement inséré actuel (s) ont été copiés à partir de, vous devrez suivre la clé primaire de l'enregistrement d'origine dans une colonne de la table principale (que j'ai appelé "copiedfromid" ici). "Inséré" est une table spéciale disponible dans un déclencheur qui contient toutes les lignes insérées dans votre table principale dans cette transaction. J'ai utilisé "FOR AFTER INSERT" plutôt que "INSERT INSERT" parce que je suppose que la clé étrangère de votre table enfant applique l'intégrité référentielle avec la table maître, donc je dois penser que vous devez seulement déclencher cette action après l'insertion .
D'où ce déclencheur obtient-il ses informations "oldchildren"? –
De la table des enfants, que j'ai alias "oldchildren" pour plus de clarté. Il trouve les enfants appartenant à l'ID "copiedfromid", que vous devez fournir avec chaque nouvel enregistrement copié. – richardtallent
bien comment pouvons-nous trouver si c'est un nouvel insert ou un processus de copie. quand nous faisons une nouvelle insertion, le déclencheur s'exécute correctement? – Aneef