Метод sp_OAGetProperty не возвращает значение при выполнении - PullRequest
0 голосов
/ 27 мая 2019

У меня есть определенный адрес для клиента, и мне нужно получить координаты широты и долготы от Google с помощью API-ключа, однако либо sp_OAGetProperty возвращает пустые данные вместо XML-данных, что может быть причиной для получения пустых результатов, которые он возвращает

Это для целей геоаналитики, я перенастроил сервер так, чтобы он принимал выполнение процедур автоматизации Ole, но все тот же.

Я использую код.

use Development_Weekly
go

DECLARE @Response varchar(8000)
DECLARE @XML xml
DECLARE @Obj int 
DECLARE @Result int 
DECLARE @HTTPStatus int 
DECLARE @Erreur varchar(MAX)
declare @MessageErreur varchar(max)
declare @MessageErreurAvecNumero varchar(max)

declare  @URL varchar(600) =(select top 1 [BranchAddressURL] from [Development_Weekly].[dbo].[vwBranchLocation])
EXEC @Result = sp_OACreate 'MSXML2.ServerXMLHttp', @Obj OUT 
if @Erreur <> 0 begin set @MessageErreur = 'sp_OACreate MSXML2.ServerXMLHttp.3.0 failed'   end
--BEGIN TRY
EXEC @Result = sp_OAMethod @Obj, 'open', NULL, 'GET', @URL, false
if @Erreur <> 0 begin set @MessageErreur = 'sp_OAMethod MSXML2.ServerXMLHttp.3.0 failed'   end

EXEC @Result = sp_OAMethod @Obj, 'setRequestHeader', NULL, 'Content-Type', 'application/x-www-form-urlencoded'
if @Erreur <> 0 begin set @MessageErreur = 'sp_OAMethod MSXML2.ServerXMLHttp.3.0 failed'   end

EXEC @Result = sp_OAMethod @Obj, send, NULL, ''
if @Erreur <> 0 begin set @MessageErreur = 'sp_OAMethod MSXML2.ServerXMLHttp.3.0 failed'  end

EXEC @Result = sp_OAGetProperty @Obj, 'responseXML.xml', @Response OUT 
if @Erreur <> 0 begin set @MessageErreur = 'sp_OAGetProperty MSXML2.ServerXMLHttp.3.0 failed'   end

EXEC @Result = sp_OADestroy @Obj
if @Erreur <> 0 begin set @MessageErreur = 'sp_OADestroy MSXML2.ServerXMLHttp.3.0 failed'   end

select @Result,@Response,@URL

1 Ответ

0 голосов
/ 30 мая 2019

Я не уверен, что именно причина без реального URL. Но я всегда вставляю ответ в табличную переменную вместо использования @Response OUT, чтобы избежать усеченного результата. Вот что я обычно делаю:

DECLARE @TABLEVAR TABLE (responseXml VARCHAR(MAX))

--skip some codes here

INSERT INTO @TABLEVAR
EXEC @Result = sp_OAGetProperty @Obj, 'responseXML.xml' --, @Response OUT 
EXEC sp_OADestroy @Obj

SELECT @Response = responseXml FROM @TABLEVAR
...