Sqlserver
 sql >> Datenbank >  >> RDS >> Sqlserver

So rufen Sie den Webdienst von t-sql aus auf

Verwenden Sie dazu SQLCLR oder ein externes Programm. In SQL 20106 können Sie R von TSQL verwenden, und in SQL 2017 können Sie auch Python verwenden. Es ist selten eine gute Idee, Webdienstaufrufe von TSQL aus zu tätigen, und wenn Sie dies tun, sollten Sie im Allgemeinen aus einer Warteschlange ziehen. In diesem Fall können Sie ein externes Programm verwenden.

Die sp_oaxxx-Prozesse sind alt, schwer zu verwenden, wenig bekannt, erfordern eine gefährliche Serverkonfiguration usw. usw.

Abgesehen davon, hier ist ein Code, den ich aus dem Usenet ausgegraben habe, den ich vor langer, langer Zeit geschrieben habe:

create procedure http_get( @sUrl varchar(200), @response varchar(8000) out)
As
begin
    Declare
      @obj   int
     ,@hr   int
     ,@status int
     ,@msg varchar(255)

       exec @hr = sp_OACreate 'MSXML2.ServerXMLHttp', @obj OUT
       if @hr < 0 begin Raiserror('sp_OACreate MSXML2.ServerXMLHttp failed', 16,1) return 1 end
       exec @hr = sp_OAMethod @obj, 'Open', NULL, 'GET', @sUrl, false
       if @hr <0 begin set @msg = 'sp_OAMethod Open failed' goto eh end
       exec @hr = sp_OAMethod @obj, 'send'
       if @hr <0 begin  set @msg = 'sp_OAMethod Send failed' goto eh end
       exec @hr = sp_OAGetProperty @obj, 'status', @status OUT
       if @hr <0 begin  set @msg = 'sp_OAMethod read status failed' goto eh end
       if @status <> 200  begin set @msg = 'sp_OAMethod http status ' + str(@status) goto eh end
       exec @hr = sp_OAGetProperty @obj, 'responseText', @response OUT
       if @hr <0 begin  set @msg = 'sp_OAMethod read response failed' goto eh end
       exec @hr = sp_OADestroy @obj
       return 0
    eh:
      exec @hr = sp_OADestroy @obj
      Raiserror(@msg, 16, 1)
      return 1
end