Jest to możliwe, ale w prawdziwym świecie jest to trochę bardziej skomplikowane niż naiwne podejście, które sobie wyobrażasz. Przede wszystkim niedopuszczalne jest, aby wyzwalacz czekał na żądanie HTTP:
- Po pierwsze, Twoja aplikacja będzie indeksować aż do piskliwego zatrzymania, ponieważ wyzwalacze będą blokować zasoby (głównie blokady) czekając na odpowiedź z jakiejś odległej usługi WWW.
- Drugą, bardziej subtelną, ale znacznie gorszą, jest kwestia poprawności w przypadku cofnięć. Jeśli transakcja, która została wysłana do żądań HTTP, zostanie wycofana, nie ma możliwości „cofnięcia” żądania HTTP.
Rozwiązaniem jest oddzielenie wyzwalacza od żądania HTTP za pośrednictwem kolejki. Wyzwalacz umieszcza żądanie w kolejce lokalnej i zatwierdza, podczas gdy oddzielny element przetwarzania usuwa te żądania z kolejki i wysyła żądanie HTTP. Rozwiązuje to oba wskazane powyżej problemy. Możesz użyć zwykłych tabel do kolejek (patrz Używanie tabel jako kolejek) lub możesz użyć Service Broker, oba działają dobrze.
Teraz o tym, jak usunąć te żądania i faktycznie wykonać wywołanie HTTP, zdecydowanie polecam użycie dedykowanego procesu (tj. aplikacji dedykowanej do tego celu). Chociaż możliwe jest użycie SQLCLR, jest to bardzo zły wybór. Zasoby SQL Server (w szczególności pracownicy) są zbyt cenne, aby je marnować na czekanie na odpowiedzi internetowe.