SQL-存儲過程GET,POST 接口方法


數據庫版本: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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM