Sqlserver
 sql >> Base de Dados >  >> RDS >> Sqlserver

como chamar serviço web do t-sql


Você deve usar SQLCLR ou um programa externo para isso. No SQL 20106 você pode usar o R ​​do TSQL e no SQL 2017 você também pode usar o Python. Raramente é uma boa ideia fazer chamadas de serviço da Web do TSQL e, se você fizer isso, geralmente deve estar puxando de uma fila. Nesse caso, você pode usar um programa externo.

Os procs sp_oaxxx são antigos, difíceis de usar, pouco conhecidos, exigem uma configuração de servidor perigosa, etc, etc.

Dito isto, aqui está um código que eu desenterrei da usenet que escrevi há muito, muito tempo:
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