sql >> Database >  >> RDS >> Sqlserver

Hoe een webservice aan te roepen vanuit de opgeslagen procedure van SQL Server

Voor zoiets heb je geen volledige webservice-implementatie nodig. U kunt SQLCLR (SQL Server's .NET Integration) gebruiken om het verzoek in te dienen bij de URL, het antwoord terug te krijgen in XML (tenzij u een JSON-bibliotheek kunt vinden die zonder werkt) ingesteld op UNSAFE ), en ontleden dan dat antwoord.

Bekijk de volgende MSDN-pagina's:

  • HttpWebRequest
  • HttpWebResponse
  • XmlDocument
  • Om aan het adres te ontsnappen:
    • Als je SQL Server 2005, 2008 of 2008 R2 gebruikt, gebruik dan Uri.EscapeDataString zoals het beschikbaar was vóór .NET Framework v4.5
    • Als u SQL Server 2012, 2014 of nieuwer gebruikt, kunt u ofwel Uri.EscapeDataString gebruiken of, als de server is bijgewerkt naar ten minste .NET Framework v4.5, u ook WebUtility.UrlEncode

Volgens de Google Geocoding API-documentatie , moet de API-URI als volgt worden opgemaakt:

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

Dien dat gewoon in met die 2 variabelen vervangen door hun juiste waarden via HttpWebRequest en bel vervolgens HttpWebRequest.GetResponse en bel vervolgens HttpWebResponse.GetResponseStream . En doe niet vergeet de Close . te bellen en Dispose methoden van HttpWebResponse (of instantiëren in een using blok)!!

Aanvullende opmerkingen:

  • Als dit nog niet is gedaan, moet u (eenmalig) "CLR-integratie" op serverniveau inschakelen:CLR-integratie inschakelen
  • Neem niet de gemakkelijke weg en zet de database op TRUSTWORTHY ON . Onderteken de assembly gewoon met een wachtwoord en maak vervolgens een asymmetrische sleutel in de master database door te verwijzen naar uw ondertekende DLL, maak vervolgens een login aan met die asymmetrische sleutel en geef die login ten slotte de UNSAFE ASSEMBLY toestemming. Vervolgens kunt u de assembly instellen WITH PERMISSION_SET = EXTERNAL_ACCESS .
  • Gebruik de SP_OA*-procedures niet zoals geadviseerd door gebruiker3469363 . Die OLE-automatiseringsprocedures zijn verouderd sinds SQL Server 2005 en zullen (hopelijk) op een dag (hopelijk binnenkort) worden verwijderd. Ze zijn ook minder efficiënt en minder veilig dan SQLCLR.
  • Nog meer opmerkingen zijn te vinden in mijn antwoord op een vergelijkbare vraag op DBA.StackExchange: Webservicegegevens naar de SQL-server brengen


  1. is er iets dat lijkt op column_id in postgresql?

  2. orakeltelling null per kolommen

  3. script om mysql dump sql-bestand te converteren naar een formaat dat kan worden geïmporteerd in sqlite3 db

  4. Hoe corrigeer ik dubbelgecodeerde UTF-8-strings in MySQL utf8_general_ci-velden?