zoukankan      html  css  js  c++  java
  • MS SQL SERVER操作API的GET和POST存储过程


    上个星期,为了连接DingDing,查找了诸多资料和朋友的指点与帮助。
    整理好2个存储过程,Get和Post:

    SET ANSI_NULLS ON
    GO
    SET QUOTED_IDENTIFIER ON
    GO
    
    CREATE PROCEDURE [dbo].[usp_Util_HttpGet]
        @Url NVARCHAR(4000),
        @ResponseText NVARCHAR(MAX) OUTPUT
    AS 
    BEGIN
        SET NOCOUNT ON
        DECLARE @ErrMsg VARCHAR(5000)
        DECLARE @token INT,@result INT,@returnTextErr VARCHAR(200),@HttpStatus VARCHAR(200)       
        
        EXECUTE @result = sp_OACreate 'Msxml2.ServerXMLHTTP.3.0', @token OUT
        IF @result <> 0
        BEGIN
            EXECUTE sp_OAGetErrorInfo @token, @ErrMsg OUT, @returnTextErr OUT
            SET @ErrMsg = '初始化对象失败,' + @ErrMsg + ISNULL(@returnTextErr, '')
            RAISERROR(@ErrMsg,16,-1)
        END
        
        EXECUTE @result = sp_OAMethod @token, 'open', NULL, 'GET', @Url,'false'   
        IF @result <> 0
        BEGIN
            EXECUTE sp_OAGetErrorInfo @token, @ErrMsg OUT, @returnTextErr OUT
            SET @ErrMsg = '创建连接失败,' + @ErrMsg + ISNULL(@returnTextErr, '')
            RAISERROR(@ErrMsg,16,-1)
        END
    
        EXECUTE @result = sp_OAMethod @token, 'setRequestHeader', NULL,'Content-Type', 'application/json; charset=UTF-8'
        IF @result <> 0
        BEGIN
            EXECUTE sp_OAGetErrorInfo @token, @ErrMsg OUT, @returnTextErr OUT
            SET @ErrMsg = '设置RequestHeader属性失败,'+ @ErrMsg + ISNULL(@returnTextErr, '')
            RAISERROR(@ErrMsg,16,-1)
        END
    
        EXECUTE @result = sp_OAMethod @token, 'send', NULL, ''
        IF @result <> 0
        BEGIN
            EXECUTE sp_OAGetErrorInfo @token, @ErrMsg OUT, @returnTextErr OUT
            SET @ErrMsg = '发送请求头失败,'+ @ErrMsg + ISNULL(@returnTextErr, '')
            RAISERROR(@ErrMsg,16,-1)
        END
    
        EXECUTE @result = sys.sp_OAGetProperty @token, 'Status', @HttpStatus OUT   
       IF @result <> 0
        BEGIN
            EXECUTE sp_OAGetErrorInfo @token, @ErrMsg OUT, @returnTextErr OUT
            SET @ErrMsg = '读取[Status]属性值失败,'+ @ErrMsg + ISNULL(@returnTextErr,'')
            RAISERROR(@ErrMsg,16,-1)
        END
    
        IF @HttpStatus <> 200
        BEGIN
            SET @ErrMsg ='访问错误,http状态代码,'+ @HttpStatus +''
            RAISERROR(@ErrMsg,16,1)
        END
           
        DECLARE @xml TABLE([ResponseText] NVARCHAR(MAX))
        INSERT INTO @xml([ResponseText]) EXECUTE @result = dbo.sp_OAGetProperty @token, 'responseText'
    
        SELECT @ResponseText = [ResponseText] FROM @xml
        
        IF @result <> 0
        BEGIN
            EXECUTE sp_OAGetErrorInfo @token, @ErrMsg OUT, @returnTextErr OUT
            SET @ErrMsg = '获取回复报文失败:' + ISNULL(@ErrMsg, '') + ''+ ISNULL(@returnTextErr, '')
            RAISERROR(@ErrMsg,16,-1)
        END
    
        EXECUTE @result = sp_OADestroy @token
        IF @result <> 0
        BEGIN
            EXECUTE sp_OAGetErrorInfo @token, @ErrMsg OUT, @returnTextErr OUT
            SET @ErrMsg = '释放资源对象,' + @ErrMsg + ISNULL(@returnTextErr, '')
            RAISERROR(@ErrMsg,16,-1)
        END    
    END
    Source Code
    SET ANSI_NULLS ON
    GO
    SET QUOTED_IDENTIFIER ON
    GO
    
    
    
    CREATE PROCEDURE [dbo].[usp_Util_HttpPost]
        @Url NVARCHAR(4000),
        @PostData NVARCHAR(4000)
    AS
    BEGIN        
        SET NOCOUNT ON
        DECLARE @ErrMsg VARCHAR(5000)
        DECLARE @token INT,@result INT,@returnTextErr VARCHAR(200),@HttpStatus VARCHAR(200)         
    
        EXECUTE @result = sp_OACreate 'Msxml2.ServerXMLHTTP.3.0', @token OUT
        IF @result <> 0
        BEGIN
            EXECUTE sp_OAGetErrorInfo @token, @ErrMsg OUT, @returnTextErr OUT
            SET @ErrMsg = '初始化对象失败,' + @ErrMsg + ISNULL(@returnTextErr, '')
            RAISERROR(@ErrMsg,16,-1)
        END
    
       EXECUTE @result = sp_OAMethod @token, 'open', NULL, 'POST', @Url,'false'
       IF @result <> 0
        BEGIN
            EXECUTE sp_OAGetErrorInfo @token, @ErrMsg OUT, @returnTextErr OUT
            SET @ErrMsg = '创建连接失败,' + @ErrMsg + ISNULL(@returnTextErr, '')
            RAISERROR(@ErrMsg,16,-1)
        END
      
       EXECUTE @result = sp_OAMethod @token, 'setRequestHeader', NULL,'Content-Type', 'application/json; charset=UTF-8' 
       IF @result <> 0
            BEGIN
                EXECUTE sp_OAGetErrorInfo @token, @ErrMsg OUT, @returnTextErr OUT
                SET @ErrMsg = '设置RequestHeader属性失败,' + @ErrMsg + ISNULL(@returnTextErr, '')
                RAISERROR(@ErrMsg,16,-1)
            END    
    
        EXECUTE @result = sp_OAMethod @token,'send', NULL, @PostData
        IF @result <> 0
        BEGIN
            EXECUTE sp_OAGetErrorInfo @token, @ErrMsg OUT, @returnTextErr OUT
            SET @ErrMsg = '发送请求头失败,' + @ErrMsg + ISNULL(@returnTextErr, '')
            RAISERROR(@ErrMsg,16,-1)
        END
    
        EXECUTE @result = sys.sp_OAGetProperty @token, 'Status', @HttpStatus OUT
        IF @result <> 0
        BEGIN
            EXECUTE sp_OAGetErrorInfo @token, @ErrMsg OUT, @returnTextErr OUT
            SET @ErrMsg = '读取[Status]属性值失败,' + @ErrMsg + ISNULL(@returnTextErr,'')
            RAISERROR(@ErrMsg,16,-1)
        END
    
        IF @HttpStatus <> 200
        BEGIN
            SET @ErrMsg ='访问错误,http状态代码,'+@HttpStatus+''
            RAISERROR(@ErrMsg,16,1)
        END
                
        IF @result <> 0
        BEGIN
            EXECUTE sp_OAGetErrorInfo @token, @ErrMsg OUT, @returnTextErr OUT
            SET @ErrMsg = '获取回复报文失败:' + ISNULL(@ErrMsg, '') + ''+ ISNULL(@returnTextErr, '')
            RAISERROR(@ErrMsg,16,-1)
        END
    
        EXECUTE @result = sp_OADestroy @token
        IF @result <> 0
        BEGIN
            EXECUTE sp_OAGetErrorInfo @token, @ErrMsg OUT, @returnTextErr OUT
            SET @ErrMsg = '释放资源对象,' + @ErrMsg + ISNULL(@returnTextErr, '')
            RAISERROR(@ErrMsg,16,-1)
        END
    END
    Source Code



  • 相关阅读:
    [SQL SERVER] The CHECK_POLICY and CHECK_EXPIRATION options cannot be turned OFF when MUST_CHANGE is ON. (Microsoft SQL Server, Error: 15128)
    CENTOS7 SYSTEMD SERVICE 将自己的程序放入自动启动的系统服务
    CentOS7 关闭selinux
    面试总结TODO
    很好用的 UI 调试技巧
    点满 webpack 技能点,让你的打包速度提效 90%
    前端缓存最佳实践
    Fiddler抓包工具总结
    按钮粒子效果
    如何优雅的在 vue 中添加权限控制
  • 原文地址:https://www.cnblogs.com/insus/p/15205077.html
Copyright © 2011-2022 走看看