Sqlserver
 sql >> Base de Dados >  >> RDS >> Sqlserver

Um gatilho SQL pode chamar um serviço da web?


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:

  1. em seu código de gatilho, insira um "chame o webservice mais tarde" em uma tabela (apenas o INSERT para mantê-lo magro e rápido - isso é tudo)

  2. 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