Sqlserver
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Sqlserver

cách gọi dịch vụ web từ t-sql

Bạn nên sử dụng SQLCLR hoặc một chương trình bên ngoài cho việc này. Trong SQL 20106, bạn có thể sử dụng R từ TSQL và trong SQL 2017, bạn cũng có thể sử dụng Python. Thực hiện các cuộc gọi dịch vụ web từ TSQL hiếm khi là một ý tưởng hay và nếu làm như vậy, bạn thường phải kéo từ một hàng đợi. Trong trường hợp đó, bạn có thể sử dụng chương trình bên ngoài.

Các procs sp_oaxxx đã cũ, khó sử dụng, ít được biết đến, yêu cầu cấu hình máy chủ nguy hiểm, v.v., v.v.

Điều đó đang được nói, đây là một số mã tôi đào được từ usenet mà tôi đã viết cách đây rất lâu, rất lâu:

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. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Đạt đến giới hạn tham số 2100 (SQL Server) khi sử dụng Chứa ()

  2. ExecuteScalar so với ExecuteNonQuery khi trả về giá trị nhận dạng

  3. So sánh các kế hoạch thực thi trong SQL Server

  4. Tại sao Thủ tục được Lưu trữ nhanh hơn Truy vấn

  5. Biến máy chủ SQL:vòng lặp so với bản sao?