SSMS: импорт данных из вызова REST - PullRequest
0 голосов
/ 26 сентября 2018

Я хочу посмотреть, смогу ли я импортировать данные в MSSQL из вызова REST по URL-адресу.Я хотел бы повторно использовать этот код для гипотетической хранимой процедуры в будущем.Это просто хочет быть доказательством концепции.

Этот URL имеет некоторый JSON, который я могу использовать для своего эксперимента:

http://api.plos.org/search?q=title:DNA

Я проверяю, возвращается ли URLнемного JSON с почтальоном:

enter image description here Все хорошо.

Теперь я следую этому руководству , которое говорит мне, как структурировать вызов и этомой код:

DECLARE @Object AS INT;
DECLARE @ResponseText AS nvarchar(max);

EXEC sp_OACreate 'MSXML2.XMLHTTP', @Object OUT;
EXEC sp_OAMethod @Object, 'open', NULL, 'GET','http://api.plos.org/search?q=title:DNA', 'false'
EXEC sp_OAMethod @Object, 'send'
EXEC sp_OAMethod @Object, 'responseText', @ResponseText OUTPUT
SELECT @ResponseText
EXEC sp_OADestroy @Object

Но, к сожалению, он возвращает мне столбец NULL.

enter image description here

Что я делаю не так?

Есть ли кто-нибудь, кто когда-либо приезжал, чтобы сделать вызов REST через SSMS?

Ответы [ 2 ]

0 голосов
/ 02 октября 2018

Я обнаружил, в чем проблема, в строке 3:

  1. NVARCHAR(MAX) может обрабатывать только 4000 символов
  2. VARCHAR(MAX) может обрабатывать только 4000 символов
  3. VARCHAR(8000) может обрабатывать 8000 символов

Поэтому, если я попытаюсь запросить URL-адрес, который возвращает меньше данных, все будет в порядке:

DECLARE @obj AS INT
DECLARE @Uri AS NVARCHAR(4000)
DECLARE @Response AS VARCHAR(8000)

SET @Uri = 'http://overpass-api.de/api/interpreter?data=area[name="Nelson"]->.a;(node(area.a)[amenity=cinema];way(area.a)[amenity=cinema];rel(area.a)[amenity=cinema];);out;'
EXEC sp_OACreate 'MSXML2.ServerXMLHttp.3.0', @obj OUT
EXEC sp_OAMethod @obj, 'open', NULL, 'GET', @Uri, false
EXEC sp_OAMethod @obj, 'send'
EXEC sp_OAGetProperty @obj, 'ResponseText', @Response OUTPUT

SELECT @Response [response] 
EXEC sp_OADestroy @obj

enter image description here

Но проблема по-прежнему сохраняется выше 8000 символов.

Было место для другого вопроса, если вы хотите копать дальше следуйте моему следующему вопросу здесь

0 голосов
/ 26 сентября 2018

Я предлагаю вам использовать SSIS (службы интеграции SQL Server) вместо SSMS.Вы можете посмотреть по следующей ссылке:

Ссылка Ссылка 1

Ссылка Ссылка 2

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