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

Un déclencheur SQL peut-il appeler un service Web ?

Même si c'est techniquement possible, ce n'est vraiment pas une bonne idée ! Un déclencheur doit être très simple et ne doit absolument pas impliquer une opération longue (ce qu'est définitivement un appel de service Web) ! Repensez votre architecture - il devrait y avoir une meilleure façon de le faire !

Ma recommandation serait de séparer la tâche de "remarquer" que vous devez appeler le service Web, dans votre déclencheur, de l'exécution réelle de cet appel de service Web.

Quelque chose comme :

  1. dans votre code de déclenchement, insérez un "do call the webservice later" dans un tableau (juste le INSERT pour le garder léger et rapide - c'est tout)

  2. avoir un service asynchrone (un travail SQL, ou de préférence un service Windows NT) qui effectue ces appels séparément de l'exécution réelle du déclencheur et stocke toutes les données extraites de ce service Web dans les tables appropriées de votre base de données.

Un déclencheur est une chose très délicate - il doit toujours être très rapide, très léger - faites un INSERT ou deux au maximum - et évitez par tous les moyens les curseurs dans les déclencheurs ou d'autres opérations longues (comme un appel de service Web)

Brent Ozar a un excellent webcast (présenté à SQL PASS) sur Le top 10 des erreurs de développeur qui ne s'adaptent pas et les déclencheurs sont la première chose sur laquelle il se concentre ! Fortement recommandé