sql >> Base de Datos >  >> RDS >> Sqlserver

cómo llamar al servicio web desde t-sql

Debe usar SQLCLR o un programa externo para esto. En SQL 20106 puede usar R de TSQL y en SQL 2017 también puede usar Python. Rara vez es una buena idea hacer llamadas de servicio web desde TSQL, y si lo hace, generalmente debería estar sacando de una cola. En cuyo caso puedes usar un programa externo.

Los procesos sp_oaxxx son antiguos, difíciles de usar, poco conocidos, requieren una configuración de servidor peligrosa, etc., etc.

Dicho esto, aquí hay un código que desenterré de Usenet y escribí hace mucho, mucho tiempo:

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