sql >> Databasteknik >  >> RDS >> Sqlserver

hur man ringer webbtjänst från t-sql

Du bör använda SQLCLR eller ett externt program för detta. I SQL 20106 kan du använda R från TSQL, och i SQL 2017 kan du också använda Python. Det är sällan en bra idé att ringa webbtjänstanrop från TSQL, och om du gör det bör du i allmänhet stå i en kö. I så fall kan du använda ett externt program.

Sp_oaxxx-processerna är gamla, svåra att använda, föga kända, kräver en farlig serverkonfiguration, etc, etc.

Som sagt, här är lite kod jag grävde fram från usenet som jag skrev för länge, länge sedan:

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


  1. Hur man extraherar en sträng mellan parenteser i oracle sql-fråga

  2. hur man använder funktionen require_once inside

  3. Infoga dubbla citattecken i SQL-utdata

  4. Ordna efter utvald DESC fungerar inte för en anpassad variabel