方法sp_OAGetProperty在执行时不返回值

时间:2019-05-27 20:20:24

标签: tsql ole google-geocoder

我有一个特定的客户地址,我需要使用API​​密钥从Google获取纬度和经度坐标,但是sp_OAGetProperty返回的是空白而不是XML数据,这可能是返回空白结果的原因?

这是出于地理分析的目的,我将服务器重新配置为接受Ole Automation Procedures的执行,但仍然相同。

我正在使用代码。

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 :(得分:0)

我不确定没有真实网址的确切原因是什么。但是我总是将响应插入到表变量中,而不是使用@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