Sqlserver
 sql >> Base de données >  >> RDS >> Sqlserver

Déclencheur SQL Insertion à partir de plusieurs tables

Vous ne référencez pas les tables insérées ou supprimées qui ne sont disponibles que dans le déclencheur, donc bien sûr vous renvoyez plus d'enregistrements que vous n'en avez besoin dans votre requête.

Lors de la première écriture d'un déclencheur, ce que je fais est de créer une table temporaire appelée #inserted (et/ou #deleted) et de la remplir avec plusieurs enregistrements. Il doit correspondre à la conception de la table sur laquelle le déclencheur sera activé. Il est important de faire en sorte que votre table temporaire ait plusieurs enregistrements d'entrée qui pourraient répondre aux différents critères qui affectent votre requête (donc dans votre cas, vous en voulez où le nombre de cas serait 0 et d'autres où il ne le serait pas par exemple) et ce serait typique de données insérées dans la table ou init mis à jour. Les déclencheurs de serveur SQL fonctionnent sur des ensembles de données, ce qui garantit également que votre déclencheur peut gérer correctement plusieurs uiinserts ou mises à jour d'enregistrement. Un déclencheur correctement écrit aurait des cas de test que vous devez tester pour vous assurer que tout se passe correctement, votre table #insérée doit inclure des enregistrements qui répondent à tous ces cas de test.

Ensuite, écrivez la requête dans une transaction (et annulez-la pendant que vous testez) en la joignant à #inserted. Si vous faites une insertion avec une sélection, n'écrivez que la partie de sélection jusqu'à ce que vous obteniez ce droit, puis ajoutez l'insertion. Pour tester, écrivez une sélection à partir de la table dans laquelle vous insérez afin de voir les données que vous avez insérées avant de revenir en arrière.

Une fois que tout fonctionne, changez les références #inserted en insert, supprimez tout code de test et bien sûr la restauration (éventuellement toute la transaction en fonction de ce que vous faites.) et ajoutez la partie drop et create trigger du code. Vous pouvez maintenant tester votre déclencheur en tant que déclencheur, mais vous êtes en forme car vous savez que cela fonctionnera probablement depuis vos tests précédents.