數據庫版本:sql server 2016
准備工作:先開啟 Ole Automation Procedures,否則會報錯:SQL Server 阻止了對組件 'Ole Automation Procedures' 的 過程'sys.sp_OACreate' 的訪問
--開啟 Ole Automation Procedures sp_configure 'show advanced options', 1; GO RECONFIGURE; GO sp_configure 'Ole Automation Procedures', 1; GO RECONFIGURE; GO EXEC sp_configure 'Ole Automation Procedures'; GO --關閉 Ole Automation Procedures sp_configure 'show advanced options', 1; GO RECONFIGURE; GO sp_configure 'Ole Automation Procedures', 1; GO RECONFIGURE; GO EXEC sp_configure 'Ole Automation Procedures'; GO --關閉高級選項 sp_configure 'show advanced options', 0; GO RECONFIGURE; GO
一,參數說明
sp_OACreate 創建 OLE 對象實例。
-->第一個參數為 OLE 對象的程序標識符(ProgID)或類標識符(CLSID)。
-->第二個參數為返回的對象令牌,必須是數據類型為 int 的局部變量,在后面的方法中都要用到對象令牌。輸出參數,必須加 OUT 或 OUTPUT。
sp_OAMethod 調用 OLE 對象的方法。
-->第一個參數為對象令牌。
-->第二個參數為方法名稱。
-->第三個參數為方法的返回值,如果方法返回的是對象,則該參數類型為 int。輸出參數,必須加 OUT 或 OUTPUT。
-->第四個及以后的參數為方法的參數值,如果方法的參數是輸出參數,則要加上 OUT 或 OUTPUT。
-->sp_OAMethod也可用來獲取屬性值。
sp_OAGetErrorInfo 獲取 OLE 自動化錯誤信息。
-->第一個參數為對象令牌。
-->第二個參數為錯誤信息的來源。輸出參數,必須加 OUT 或 OUTPUT。
-->第三個參數為錯誤的描述。輸出參數,必須加 OUT 或 OUTPUT。
sp_OADestroy 釋放已創建的 OLE 對象。
-->第一個參數為對象令牌。
另外,sp_OAGetProperty 獲取 OLE 對象的屬性值,sp_OASetProperty 將 OLE 對象的屬性設置為新值,sp_OAStop 停止服務器范圍內的 OLE 自動化存儲過程執行環境。這些都比較簡單。
這七個存儲過程都有返回值,如果返回值是 0 表示成功,其它值表示失敗,示例中只對 sp_OACreate 的返回值作了判斷。
二,GET方法參考
CREATE PROCEDURE [dbo].[get]( --創建存儲過程get @URL varchar(500), --輸入參數變量 @ResponseText varchar(8000) OUTPUT --返回參數 ) AS BEGIN Declare @Status as Int --聲明對象類型為INT整數 --sp_OACreate 創建 OLE 對象實例, Msxml2.ServerXMLHTTP.3.0 返回的對象令牌,@Status:自定義對象名稱 --數據類型必須為 int 的局部變量,后面的方法中都要用到對象令牌。輸出參數,必須加 OUT 或 OUTPUT。 Exec sp_OACreate 'Msxml2.ServerXMLHTTP.3.0', @Status OUT; --相當於將Msxml2.ServerXMLHTTP.3.0賦值為@Status,@Status就算對象令牌 -->sp_OAMethod 一共有4個參數,sp_OAMethod也可用來獲取屬性值。 Exec sp_OAMethod @Status, 'open', NULL, 'GET',@URL,'false' --第一個參數為對象令牌。 Exec sp_OAMethod @Status, 'setRequestHeader', NULL, 'Content-Type','application/json' --第二個參數為方法名稱。 Exec sp_OAMethod @Status, 'send', NULL, NULL --第三個參數為方法的返回值,如果方法返回的是對象,則該參數類型為 int。輸出參數,必須加 OUT 或 OUTPUT。 Exec sp_OAMethod @Status, 'responseText', @ResponseText OUTPUT --第四個及以后的參數為方法的參數值,如果方法的參數是輸出參數,則要加上 OUT 或 OUTPUT。 if @Status<>0 begin --sp_OAGetErrorInfo 獲取 OLE 自動化錯誤信息。 --第一個參數為對象令牌。 --第二個參數為錯誤信息的來源。輸出參數,必須加 OUT 或 OUTPUT。 --第三個參數為錯誤的描述。輸出參數,必須加 OUT 或 OUTPUT。 EXEC sp_OAGetErrorInfo @Status --sp_OAGetErrorInfo 獲取 OLE 自動化錯誤信息。 end Exec sp_OADestroy @Status --sp_OADestroy 釋放已創建的 OLE 對象。 END
三,POST方法參考
CREATE PROCEDURE [dbo].[sp_http_post]( @URL varchar(500), --請求地址 @Data varchar(8000), --請求參數 @ResponseText varchar(8000) OUTPUT ) AS BEGIN Declare @Status as Int Exec sp_OACreate 'Msxml2.ServerXMLHTTP.3.0', @Status OUT; Exec sp_OAMethod @Status, 'open', NULL, 'POST',@URL,'false' Exec sp_OAMethod @Status, 'setRequestHeader', NULL, 'Content-Type','application/json' Exec sp_OAMethod @Status, 'send', NULL, @Data Exec sp_OAMethod @Status, 'responseText', @ResponseText OUTPUT if @Status<>0 begin EXEC sp_OAGetErrorInfo @Status end Exec sp_OADestroy @Status END
參考地址:https://www.cnblogs.com/icyhoo/p/12942833.html