0

我有以下存储过程:

CREATE PROCEDURE Reports.P_CallAPI_Custom 
        @Url NVARCHAR(500),
        @requestHeaderKey NVARCHAR(100),
        @requestHeaderValue NVARCHAR(512),
        @messageRequest NVARCHAR(MAX),
        @messageResponse NVARCHAR(MAX) OUTPUT
    
AS
BEGIN
    
    DECLARE @APIResponse as TABLE(APIResponseValue NVARCHAR(MAX));
    DECLARE @Object AS INT;
    DECLARE @hr AS INT;
    DECLARE @source varchar(255);  
    DECLARE @description varchar(255);
        
    EXEC @hr=sp_OACreate 'MSXML2.ServerXMLHTTP.6.0', @Object OUT;  <-- Errors quite randomly
        
    IF @hr = 0 AND @Object IS NOT NULL
    BEGIN
        EXEC @hr=sp_OAMethod @Object, 'open', NULL, 'post',
                        @Url, --Web Service Url (invoked)
                        'false'
        IF @hr = 0
            EXEC sp_OAMethod @Object, 'setRequestHeader',null,@requestHeaderKey,@requestHeaderValue
    
        IF @hr = 0
            EXEC sp_OAMethod @Object, 'setRequestHeader',null,'Content-type','application/json'
    
        IF @hr = 0
            EXEC @hr=sp_OAMethod @Object, 'send', null, @messageRequest 
    
        IF @hr = 0
        BEGIN
    
            DECLARE @status NVARCHAR(32);
            DECLARE @statusText NVARCHAR(32);
            EXEC @hr = sp_OAGetProperty @Object, 'status', @status OUT;
            EXEC @hr = sp_OAGetProperty @Object, 'statusText', @statusText OUT;
            
            IF @status =  '200'
            BEGIN
                INSERT INTO @APIResponse (APIResponseValue) EXEC sp_OAGetProperty @Object, 'responseText';
                SELECT @messageResponse = APIResponseValue from @APIResponse;
            END
            ELSE
            BEGIN
                SELECT @messageResponse = 'Warning: Unauthorized. Status: ' +  @status + ' (' + @statusText + ')'   
                RETURN
            END
        END
        
        EXEC sp_OADestroy @Object;
    END

    IF @hr <> 0 
    BEGIN
        EXEC @hr = sp_OAGetErrorInfo @object, @source OUT, @description OUT;  
        IF @hr = 0  
        BEGIN  
            SELECT @messageResponse = 'Error:' + @source + '.' + @description 
            RETURN
        END  
        ELSE  
        BEGIN  
            SELECT @messageResponse = 'Error: sp_OAGetErrorInfo failed.' 
            RETURN  
        END
    END
END;

此过程由另一个存储过程调用,而该存储过程又由报告 (SSRS) 调用。

非常随机(它比失败更有效),我收到以下错误: 设置后无法更改线程模式

我可以缩小问题范围并确认错误正在sp_OACreate执行中,但我无法在网上找到有关此错误的有用帮助。

4

0 回答 0