sql >> Databasteknik >  >> RDS >> Sqlserver

Hur man anropar webbtjänst från SQL Server lagrad procedur

För något sådant här behöver du inte en fullständig webbtjänstimplementering. Du kan använda SQLCLR (SQL Servers .NET-integration) för att skicka begäran till URL:en, få tillbaka svaret i XML (såvida du inte kan hitta ett JSON-bibliotek som fungerar utan är inställd på UNSAFE ), och analysera sedan det svaret.

Titta på följande MSDN-sidor:

  • HttpWebRequest
  • HttpWebResponse
  • XmlDocument
  • Så här undviker du adressen:
    • Om du använder SQL Server 2005, 2008 eller 2008 R2, använd sedan Uri.EscapeDataString eftersom det var tillgängligt före .NET Framework v4.5
    • Om du använder SQL Server 2012, 2014 eller nyare kan du använda antingen Uri.EscapeDataString eller, om servern har uppdaterats till minst .NET Framework v4.5, kan du alternativt använda WebUtility.UrlEncode

Enligt dokumentationen för Google Geocoding API , bör API-URI:n formateras på samma sätt som följande:

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

Skicka bara in det med de två variablerna ersatta med deras rätta värden via HttpWebRequest , ring sedan HttpWebRequest.GetResponse , anrop sedan HttpWebResponse.GetResponseStream . Och gör inte glöm att ringa Close och Dispose metoder för HttpWebResponse (eller instansiera det i en using block)!!

Ytterligare anmärkningar:

  • Om du inte redan har gjort det måste du aktivera (en gång) "CLR Integration" på servernivå:Aktivera CLR-integration
  • Ta inte den enkla vägen och ställ in databasen på TRUSTWORTHY ON . Signera bara sammansättningen med ett lösenord och skapa sedan en asymmetrisk nyckel i master databas genom att peka på din signerade DLL, skapa sedan en inloggning från den asymmetriska nyckeln och ge slutligen den inloggningen UNSAFE ASSEMBLY tillstånd. Sedan kan du ställa in sammansättningen WITH PERMISSION_SET = EXTERNAL_ACCESS .
  • Använd inte SP_OA*-procedurerna som förespråkas av user3469363 . Dessa OLE Automation-procedurer har föråldrats sedan SQL Server 2005 och kommer (förhoppningsvis) att tas bort någon gång (förhoppningsvis snart). De är också mindre effektiva och mindre säkra än SQLCLR.
  • Ännu fler anteckningar finns i mitt svar på en liknande fråga på DBA.StackExchange: Överföra webbtjänstdata till SQL-servern


  1. Hur aktiverar jag LOAD DATA LOCAL INFILE i Propel?

  2. Hur mappar man kolumntypen PostgreSQL Interval i Hibernate?

  3. Hur sätter du in stora blobbar i Oracle 10G med System.Data.OracleClient?

  4. gruppera efter datum, bekräfta, väntar