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 nomaster
banco de dados apontando para sua DLL assinada, crie um login a partir dessa chave assimétrica e, finalmente, conceda a esse login oUNSAFE ASSEMBLY
permissã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