Sqlserver
 sql >> Database >  >> RDS >> Sqlserver

come chiamare il servizio web da t-sql

Dovresti usare SQLCLR o un programma esterno per questo. In SQL 20106 puoi usare R da TSQL e in SQL 2017 puoi usare anche Python. Raramente è una buona idea effettuare chiamate ai servizi Web da TSQL e, in tal caso, dovresti generalmente eseguire il pull da una coda. In tal caso puoi usare un programma esterno.

I proc sp_oaxxx sono vecchi, difficili da usare, poco conosciuti, richiedono una configurazione del server pericolosa, ecc, ecc.

Detto questo, ecco del codice che ho recuperato da usenet che ho scritto molto, molto tempo fa:

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