Sqlserver
 sql >> Base de données >  >> RDS >> Sqlserver

Comment appeler un service Web à partir d'une procédure stockée SQL Server

Pour quelque chose comme ça, vous n'avez pas besoin d'une implémentation complète du service Web. Vous pouvez utiliser SQLCLR (intégration .NET de SQL Server) pour soumettre la requête à l'URL, récupérer la réponse en XML (sauf si vous pouvez trouver une bibliothèque JSON qui fonctionnera sans étant défini sur UNSAFE ), puis analysez cette réponse.

Consultez les pages MSDN suivantes :

  • HttpWebRequest
  • HttpWebResponse
  • XmlDocument
  • Pour échapper l'adresse :
    • Si vous utilisez SQL Server 2005, 2008 ou 2008 R2, utilisez Uri.EscapeDataString car il était disponible avant .NET Framework v4.5
    • Si vous utilisez SQL Server 2012, 2014 ou une version plus récente, vous pouvez utiliser Uri.EscapeDataString ou, si le serveur a été mis à jour vers au moins .NET Framework v4.5, vous pouvez également utiliser WebUtility.UrlEncode

Selon la documentation de l'API Google Geocoding , l'URI de l'API doit avoir le format suivant :

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

Soumettez simplement cela avec ces 2 variables remplacées par leurs valeurs appropriées via HttpWebRequest , puis appelez HttpWebRequest.GetResponse , puis appelez HttpWebResponse.GetResponseStream . Et ne faites pas oublier d'appeler le Close et Dispose méthodes de HttpWebResponse (ou instanciez-le dans un using bloc) !!

Remarques supplémentaires :

  • Si ce n'est déjà fait, vous devrez activer (une fois) "l'intégration CLR" au niveau du serveur :Activation de l'intégration CLR
  • Ne prenez pas la route facile et définissez la base de données sur TRUSTWORTHY ON . Il suffit de signer l'assembly avec un mot de passe, puis de créer une clé asymétrique dans le master base de données en pointant vers votre DLL signée, puis créez une connexion à partir de cette clé asymétrique, et enfin accordez à cette connexion le UNSAFE ASSEMBLY autorisation. Ensuite, vous pouvez définir l'assemblage WITH PERMISSION_SET = EXTERNAL_ACCESS .
  • N'utilisez pas les procédures SP_OA* comme recommandé par user3469363 . Ces procédures OLE Automation sont obsolètes depuis SQL Server 2005 et seront (espérons-le) supprimées un jour (espérons-le bientôt). Ils sont également moins efficaces et moins sécurisés que SQLCLR.
  • Encore plus de notes peuvent être trouvées dans ma réponse à une question similaire sur DBA.StackExchange : Importation des données de service Web dans le serveur SQL