SqlServer2008R2調用WebApi接口


1.開啟SqlServer通訊配置

------------------- 開啟Sql Server 通訊配置 -------------------
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

 

2.創建函數

 
 DROP FUNCTION FN_HTTP_POST;
CREATE FUNCTION FN_HTTP_POST(@URL VARCHAR(256),
@DATA VARCHAR(8000),
@REQ_H_ACCEPT VARCHAR(256),
@REQ_H_CONTENT_TYPE VARCHAR(256)
)
RETURNS VARCHAR(5000)
AS 
BEGIN

DECLARE 
@object int,
@returnStatus int,
@returnText varchar(5000),
@errMsg varchar(2000),
@httpStatus varchar(20)
;

/* 初始化 */  
    EXEC @returnStatus = SP_OACreate 'Msxml2.ServerXMLHTTP.3.0',@object OUT;  
    
    IF @returnStatus <> 0  
    BEGIN  
EXEC SP_OAGetErrorInfo @object, @errMsg OUT, @returnText OUT;
RETURN ('初始化對象失敗,' + @errMsg + ISNULL(@returnText,''));  
    END   
/*創建鏈接*/
EXEC @returnStatus= SP_OAMethod @object,'open',NULL,'post',@URL,'false';

IF @returnStatus <> 0
BEGIN
EXEC SP_OAGetErrorInfo @object, @errMsg OUT, @returnText OUT;
RETURN ('創建連接失敗,' + @errMsg + ISNULL(@returnText, ''));
END

EXEC @returnStatus=SP_OAMethod @object,'setRequestHeader',NULL,'Accept',@REQ_H_ACCEPT;
EXEC @returnStatus=SP_OAMethod @object,'setRequestHeader',NULL,'Content-Type',@REQ_H_CONTENT_TYPE;
EXEC @returnStatus=SP_OAMethod @object,'setRequestHeader',NULL,'Content-Length','1000000';

/*發起請求*/
EXEC @returnStatus= SP_OAMethod @object,'send',NULL,@DATA;
IF @returnStatus <> 0 
BEGIN 
EXEC SP_OAGetErrorInfo @object, @errMsg OUT, @returnText OUT;
RETURN ('發起請求失敗,' + @errMsg + ISNULL(@returnText, ''));
END

/*獲取HTTP狀態代碼*/
EXEC @returnStatus = SP_OAGetProperty @Object, 'Status', @httpStatus OUT;

    IF @returnStatus <> 0
    BEGIN
        EXEC sp_OAGetErrorInfo @Object, @errMsg OUT, @returnText OUT;
        RETURN ('獲取HTTP狀態代碼失敗,' + @errMsg + ISNULL(@returnText, ''));
    END

    IF @httpStatus <> 200
    BEGIN
        RETURN ('訪問錯誤,HTTP狀態代碼:' + @httpStatus);
    END
/*獲取返回信息*/
EXEC @returnStatus= SP_OAGetProperty @object,'responseText',@returnText OUT;

IF @returnStatus <> 0 
BEGIN 
EXEC SP_OAGetErrorInfo @object, @errMsg OUT, @returnText OUT;
RETURN ('獲取返回信息失敗,' + @errMsg + ISNULL(@returnText, ''));
END

 
RETURN @returnText;
END 
;

 

3..執行調用

SELECT dbo.FN_HTTP_POST('http://localhost:28775/api/User/LoginUser',
'{"userName":"dzw159","password":"123456","type":1}',
'application/json','application/json');

 

4.結果

補充(HttpGet):

 

SET QUOTED_IDENTIFIER ON
SET ANSI_NULLS ON
GO

CREATE FUNCTION [dbo].[FN_HTTP_GET](
@ServiceUrl VARCHAR(8000)
)
RETURNS VARCHAR(5000)
AS 
BEGIN

DECLARE @data varchar(max);
set @data=''                  

Declare @Object as Int
Declare @ResponseText AS  varchar(8000)   ;      
Exec sp_OACreate 'Msxml2.ServerXMLHTTP.3.0', @Object OUT;
Exec sp_OAMethod @Object, 'open', NULL, 'GET',@ServiceUrl,'false'
Exec sp_OAMethod @Object, 'send', NULL, @data --發送數據
Exec sp_OAMethod @Object, 'responseText', @ResponseText OUTPUT
--EXEC sp_OAGetErrorInfo @Object --異常輸出
RETURN @ResponseText 
--Exec sp_OADestroy @Object

END
;
GO

調用:

SELECT dbo.FN_HTTP_GET('http://localhost:1006/api/EAS/GetTravelApplicationStatus?Number=' + ISNULL('8c1d6178-eab8-3237-589a-3c9d5dd436c3',''));

結果:

 

 

 

 

感謝:https://blog.csdn.net/zhou279818998/article/details/99448510?spm=1035.2023.3001.6557&utm_medium=distribute.pc_relevant_bbs_down.none-task-blog-2~all~sobaiduend~default-2.nonecase&depth_1-utm_source=distribute.pc_relevant_bbs_down.none-task-blog-2~all~sobaiduend~default-2.nonecase

 

 

這邊我也參考了:http://sql.zhizuobiao.com/sql-18083100079/

https://www.cnblogs.com/lflyq/p/6065160.html

https://blog.csdn.net/xieweikun_7/article/details/117363665

https://www.cnblogs.com/zhaoxxnbsp/p/13570873.html

 https://www.cnblogs.com/dong-1984dd/archive/2012/01/17/SQL-Web.html

(但是這個好像要SqlServer2012)

 注:這里【 https://www.cnblogs.com/dong-1984dd/archive/2012/01/17/SQL-Web.html】有說是需要安裝Soap,用上面函數調用的方式不需要安裝,

但是如果用2012的我就不知道了,下載地址:https://www.fxxz.com/soft/118617.html

 


免責聲明!

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



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