Para algo assim, você não precisa de uma implementação de serviço web completa. Você pode usar SQLCLR (SQL Server's .NET Integration) para enviar a solicitação para a URL, obter a resposta de volta em XML (a menos que você encontre uma biblioteca JSON que funcione sem sendo definido como
UNSAFE ) e, em seguida, analise essa resposta. Veja as seguintes páginas do MSDN:
- HttpWebRequest
- HttpWebResponse
- XmlDocument
- Para escapar do endereço:
- Se você estiver usando o SQL Server 2005, 2008 ou 2008 R2, use Uri.EscapeDataString como estava disponível antes do .NET Framework v4.5
- Se você estiver usando o SQL Server 2012, 2014 ou mais recente, poderá usar Uri.EscapeDataString ou, se o servidor tiver sido atualizado para pelo menos .NET Framework v4.5, poderá usar alternativamente WebUtility.UrlEncode
De acordo com a documentação da Google Geocoding API , o URI da API deve ser formatado de forma semelhante ao seguinte:
https://maps.googleapis.com/maps/api/geocode/xml?address={EscapedAddress}&key={API_KEY}
Basta enviar isso com essas 2 variáveis substituídas por seus valores apropriados via
HttpWebRequest , então chame HttpWebRequest.GetResponse , então chame HttpWebResponse.GetResponseStream . E não esqueça de chamar o Close e Dispose métodos de HttpWebResponse (ou instanciá-lo em um using quadra)!! Notas Adicionais:
- Se ainda não tiver feito, você terá que habilitar (uma vez) a "Integração CLR" no nível do servidor:Habilitando integração CLR
- Não pegue o caminho mais fácil e defina o banco de dados como
TRUSTWORTHY ON. Basta assinar o assembly com uma senha e criar uma chave assimétrica nomasterbanco de dados apontando para sua DLL assinada, crie um login a partir dessa chave assimétrica e, finalmente, conceda a esse login oUNSAFE ASSEMBLYpermissão. Então você pode definir o assemblyWITH PERMISSION_SET = EXTERNAL_ACCESS. - Não use os procedimentos SP_OA* conforme defendido pelo usuário3469363 . Esses procedimentos de automação OLE foram preteridos desde o SQL Server 2005 e (espero) serão removidos algum dia (espero que em breve). Eles também são menos eficientes e menos seguros que o SQLCLR.
- Ainda mais observações podem ser encontradas na minha resposta a uma pergunta semelhante no DBA.StackExchange: Trazendo dados de serviço da Web para o SQL Server