Sqlserver
 sql >> Database >  >> RDS >> Sqlserver

Come richiamare il servizio Web dalla stored procedure di SQL Server

Per qualcosa del genere, non è necessaria un'implementazione completa del servizio Web. Puoi utilizzare SQLCLR (integrazione .NET di SQL Server) per inviare la richiesta all'URL, ottenere la risposta in XML (a meno che tu non riesca a trovare una libreria JSON che funzionerà senza essendo impostato su UNSAFE ), quindi analizzare la risposta.

Guarda le seguenti pagine MSDN:

  • HttpWebRequest
  • HttpWebResponse
  • XmlDocument
  • Per sfuggire all'indirizzo:
    • Se utilizzi SQL Server 2005, 2008 o 2008 R2, utilizza Uri.EscapeDataString poiché era disponibile prima di .NET Framework v4.5
    • Se utilizzi SQL Server 2012, 2014 o versioni successive, puoi utilizzare Uri.EscapeDataString oppure, se il server è stato aggiornato almeno a .NET Framework v4.5, puoi in alternativa utilizzare WebUtility.UrlEncode

Secondo la documentazione dell'API di Google Geocoding , l'URI dell'API deve essere formattato in modo simile al seguente:

https://maps.googleapis.com/maps/api/geocode/xml?address={EscapedAddress}&key={API_KEY}

Invialo semplicemente con quelle 2 variabili sostituite con i loro valori appropriati tramite HttpWebRequest , quindi chiama HttpWebRequest.GetResponse , quindi chiama HttpWebResponse.GetResponseStream . E non dimentica di chiamare il Close e Dispose metodi di HttpWebResponse (o istanziarlo in un using blocco)!!

Note aggiuntive:

  • Se non l'hai già fatto, dovrai abilitare (una volta) "Integrazione CLR" a livello di server:Abilitazione dell'integrazione CLR
  • Non prendere la strada facile e imposta il database su TRUSTWORTHY ON . Basta firmare l'assembly con una password, quindi creare una chiave asimmetrica nel master database puntando alla tua DLL firmata, quindi crea un login da quella chiave asimmetrica e infine concedi a quel login il UNSAFE ASSEMBLY autorizzazione. Quindi puoi impostare l'assembly WITH PERMISSION_SET = EXTERNAL_ACCESS .
  • Non utilizzare le procedure SP_OA* come consigliato dall'utente3469363 . Tali procedure di automazione OLE sono state deprecate da SQL Server 2005 e (si spera) verranno rimosse un giorno (si spera presto). Sono anche meno efficienti e meno sicuri di SQLCLR.
  • Ancora più note possono essere trovate nella mia risposta a una domanda simile su DBA.StackExchange: Portare i dati del servizio web nel server SQL