Несколько значений из вызова API через SQL серверную функцию - PullRequest
0 голосов
/ 29 мая 2020

Я пытаюсь написать SQL серверную функцию, которая позволит мне передать значение адреса, запросить API Google Places, а затем записать обратно значения, которые возвращаются в таблицу (place_id, name, address).

Я думаю, что единственный способ сделать это - создать табличную функцию. Я сослался на несколько других сообщений здесь, но, похоже, я не могу заставить себя обернуться, переходя от простых выводов в этих сообщениях к приведенному ниже коду, который вызывает и анализирует данные API.

Вот что у меня есть до сих пор :

CREATE FUNCTION dbo.GetPlaceID (@fulladdr nvarchar(1000))
RETURN @gplace TABLE
               (
                    place_id nvarchar(500),
                    name nvarchar(500),
                    address nvarchar(1000)
               )
AS
BEGIN
    DECLARE @Object as Int;
    DECLARE @hr  int
    DECLARE @json AS TABLE (Json_Table nvarchar(max))
    DECLARE @addr nvarchar(1000)
    DECLARE @url nvarchar(1000)
    -- DECLARE @plID nvarchar(500)

    SET @addr = @fulladdr
    SET @url = 'https://maps.googleapis.com/maps/api/place/findplacefromtext/json?input=' + @addr + '&inputtype=textquery&fields=place_id,name,formatted_address&key=<APIKEY>'

    EXEC @hr=sp_OACreate 'MSXML2.ServerXMLHTTP.6.0', @Object OUT;

    IF @hr <> 0 
       EXEC sp_OAGetErrorInfo @Object

    EXEC @hr = sp_OAMethod @Object, 'open', NULL, 'get',
                @url,
                'false'

    IF @hr <> 0 EXEC 
        sp_OAGetErrorInfo @Object

    EXEC @hr = sp_OAMethod @Object, 'send'

    IF @hr <> 0 
       EXEC sp_OAGetErrorInfo @Object

    INSERT INTO @json (Json_Table) 
        EXEC sp_OAGetProperty @Object, 'responseText'

    -- Parse the JSON string
    SELECT * 
    FROM OPENJSON((SELECT * FROM @json), N'$.candidates')
    WITH (   
          [place_id] nvarchar(max) N'$.place_id',
          [name]   nvarchar(max) N'$.name',
          [address] nvarchar(max) N'$.formatted_address'
         )

    EXEC sp_OADestroy @Object

    RETURN
END

В настоящее время я получаю следующие ошибки:

  1. при вызове INSERT INTO @json (Json_Table) я получаю сообщение об ошибке

    Недопустимое использование побочного оператора 'INSERT EXE C' в функции

  2. в строке SELECT * FROM OPENJSON(), появляется другая ошибка:

    Операторы выбора, включенные в функцию, не могут возвращать данные клиенту

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...