Mesmo que tecnicamente pudesse, não é uma boa ideia! Um gatilho deve ser muito enxuto e definitivamente não deve envolver uma operação demorada (o que uma chamada de webservice definitivamente é)! Repense sua arquitetura - deve haver uma maneira melhor de fazer isso!
Minha recomendação seria separar a tarefa de "perceber" que você precisa chamar o webservice, em seu gatilho, da execução real dessa chamada de webservice.
Algo como:
-
em seu código de gatilho, insira um "chame o webservice mais tarde" em uma tabela (apenas oINSERT
para mantê-lo magro e rápido - isso é tudo)
-
tem um serviço assíncrono (um trabalho SQL, ou preferencialmente um serviço Windows NT) que faz essas chamadas separadamente da execução real do gatilho e armazena todos os dados recuperados desse serviço Web nas tabelas apropriadas em seu banco de dados.
Um gatilho é uma coisa muito complicada - deve sempre ser muito rápido, muito enxuto - faça um
INSERT
ou dois no máximo - e evite cursores em gatilhos ou outras operações demoradas (como uma chamada de serviço da web) Brent Ozar tem um ótimo webcast (apresentado no SQL PASS) em Os 10 principais erros do desenvolvedor que não escalam e os gatilhos são a primeira coisa em que ele se concentra! Altamente recomendado