Gibt es eine Möglichkeit, aus einer TSQL gespeicherte Prozedur oder Funktion zu einem Webservice aufrufen?
Antworten
Zu viele Anzeigen?Sie können dies mit den eingebetteten VB-Objekten tun.
Zunächst erstellen Sie ein VB-Objekt des Typs 'MSXML2.XMLHttp', und Sie verwenden dieses eine Objekt für alle Ihre Abfragen (wenn Sie es jedes Mal neu erstellen, müssen Sie mit einem erheblichen Leistungsverlust rechnen).
Dann speisen Sie dieses Objekt und einige Parameter in eine gespeicherte Prozedur ein, die sp_OAMethod für das Objekt aufruft.
Entschuldigen Sie das ungenaue Beispiel, aber eine schnelle Google-Suche sollte zeigen, wie die vb-Skript-Methode durchgeführt wird.
--
Aber die CLR-Version ist viel....MUCH einfacher. Das Problem beim Aufrufen von Webservices ist, dass sie nicht mit der DB-Engine Schritt halten können. Sie werden viele Fehler erhalten, wo es einfach nicht mithalten kann.
Und denken Sie daran, dass die Webdienste jedes Mal eine neue Verbindung erfordern. Hier kommt die Multiplizität ins Spiel. Sie wollen doch nicht 5000 Socket-Verbindungen öffnen, um einen Funktionsaufruf für eine Tabelle zu bedienen. Das ist verrückt!
In diesem Fall müssten Sie eine benutzerdefinierte Aggregatfunktion erstellen und DIESE als Argument zur Übergabe an Ihren Webservice verwenden, der eine Ergebnismenge zurückgeben würde... dann müssten Sie diese zusammenstellen. Es ist wirklich eine umständliche Art, Daten zu erhalten.
Hier ein Beispiel, um einige Daten von einem Webservice zu erhalten. In diesem Fall wird ein User-Agent-String in JSON geparst.
--first configure MSSQL to enable calling out to a webservice (1=true, 0=false)
sp_configure 'show advanced options', 1;
GO
RECONFIGURE;
GO
sp_configure 'Ole Automation Procedures', 1;
GO
RECONFIGURE;
GO
CREATE PROCEDURE CallWebAPI_ParseUserAgent @UserAgent VARCHAR(512)
AS
BEGIN
SET NOCOUNT ON;
DECLARE @Object INT;
DECLARE @ResponseText AS VARCHAR(8000);
DECLARE @url VARCHAR(512)
SET @url = 'http://www.useragentstring.com/?getJSON=all&uas=' + @UserAgent;
EXEC sp_OACreate 'WinHttp.WinHttpRequest.5.1', @Object OUT;
EXEC sp_OAMethod @Object, 'Open', NULL, 'GET', @url, 'false'
EXEC sp_OAMethod @Object, 'setRequestHeader', NULL, 'Content-Type', 'application/json'
EXEC sp_OAMethod @Object, 'send'
EXEC sp_OAMethod @Object, 'responseText', @ResponseText OUTPUT
SELECT @ResponseText
EXEC sp_OADestroy @Object
END
--example how to call the API
CallWebAPI_ParseUserAgent 'Mozilla/5.0 (Windows NT 6.2; rv:53.0) Gecko/20100101 Firefox/53.0'
Wenn Sie mit Sql 2000 Kompatibilitätsstufen arbeiten und keine ClR-Integration durchführen können, lesen Sie http://www.vishalseth.com/post/2009/12/22/Call-a-webservice-from-TSQL-(Gespeicherte-Verfahren)-mit-MSXML.aspx
Ich habe für große/globale Unternehmen auf der ganzen Welt gearbeitet, die Oracle-Datenbanken verwenden. Wir nutzen ständig Webdienste über die DB mit Speicherprozeduren und haben keine Probleme, auch nicht bei hohem Datenverkehr. Alle von ihnen für den internen Gebrauch, ich meine ohne Zugang zum Internet, nur innerhalb der Anlage. Ich würde empfehlen, es zu verwenden, aber wirklich vorsichtig zu sein, wie Sie es entwerfen
- See previous answers
- Weitere Antworten anzeigen