私はSQLサーバーを使用してGoogle Maps APIを呼び出し、GPS位置のデータを取得しています。正常に機能しましたが、最近、呼び出すストアドプロシージャがこのエラーで失敗します
0x8004271F
ODSOLE Extended Procedure
The source data specified for this string or binary column or parameter is too long.
Googleが位置データの「ボートロード」を返すと、文字数制限に達しているようです.
これは、これまでのところ私が呼びかけているものです:
-- Select dbo.fnGetAddressFromGPS('33.83528299,-118.28754585')
-- -- GO
Declare @GPS VarChar(50)
Set @GPS = '34.55,-118.50'
DECLARE @URL VarChar(4000)
DECLARE @win int
DECLARE @hr int
DECLARE @text varchar(8000)
Set @URL = 'http://maps.googleapis.com/maps/api/geocode/xml?latlng=' + @GPS + '&sensor=false'
Set @URL = 'http://maps.googleapis.com/maps/api/geocode/xml?latlng=34.5566767,-118.50677688&sensor=false'
Set @URL = 'http://maps.googleapis.com/maps/api/geocode/json? latlng=34.5566767,-118.50677688&sensor=false'
EXEC @hr=sp_OACreate 'WinHttp.WinHttpRequest.5.1',@win OUT
IF @hr <> 0 EXEC sp_OAGetErrorInfo @win
EXEC @hr=sp_OAMethod @win, 'Open',NULL,'GET',@url,'false'
IF @hr <> 0 EXEC sp_OAGetErrorInfo @win
EXEC @hr=sp_OAMethod @win,'Send'
IF @hr <> 0 EXEC sp_OAGetErrorInfo @win
EXEC @hr=sp_OAGetProperty @win, 'ResponseText',@text OUTPUT
IF @hr <> 0 EXEC sp_OAGetErrorInfo @win
EXEC @hr=sp_OADestroy @win
--IF @hr <> 0 EXEC sp_OAGetErrorInfo @win
Select @Text As 'GoogleResult'
Return
IF CHARINDEX('ZERO_RESULTS', @text) > 0
Select 'No Address Found'
Declare @i Int
Declare @j Int
Declare @Address VarChar(150)
SELECT @i = CHARINDEX('<formatted_address>', @Text);
SELECT @j = CHARINDEX('</formatted_address>', @Text);
SELECT @i = CHARINDEX('"formatted_address" : "', @Text);
Select @i
Return
If @j-@i-Len('<formatted_address>') <= 0
Select @Address = 'N/A'
Else
Select @Address = SubString(@text, @i+Len('<formatted_address>'), @j-@i- Len('<formatted_address>'))
--Select @Address
Select @Address
私がやりたいのは、Googleから返されるデータをフォーマットされたアドレス部分だけに制限することです。他に考えられる唯一のことは、結果データを切り捨てることですが、現時点ではそれもわかりません。どんな助けでも大歓迎です。