我有以下存储过程:
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
执行中,但我无法在网上找到有关此错误的有用帮助。