Вызов службы REST через SSMS - действительно не лучшая идея.
Кстати, с тех пор как Microsoft создала хранимую процедуру sp_OAMethod и даже Фил Фактор из Red Gate показывает нам, как ее использовать Я хотел попробовать.
Я хотел импортировать некоторые данные из OpenStreetMap непосредственно в MSSQL, поэтому я скопировал хороший запрос отсюда и адаптировал его к своему желанию.
В этом примере я возвращаю все кинотеатры в Нельсон :
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
Легко и просто, я вижу ответ на вызов REST в Почтальоне, а также вSSMS:
Проблема начинается, когда я пытаюсь получить все кинотеатры из более крупного города, например Окленд :
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="Auckland"]->.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
Вызов REST извлекает дополнительные данные, и переменная @Response AS VARCHAR(8000)
не может содержать все данные:
Конечно, я пытался использоватьDECLARE @Response AS VARCHAR(MAX)
но это тоже не поможет.
Разве VARCHAR(MAX)
не должны содержать 65 535 символов и до 2ГБ данных?
Что я должен использовать вместо этого?
Есть ли способ разделить данные и объединить позже?
РЕДАКТИРОВАТЬ: Я думаю, что я все ближе: я могу использовать OPENJSON таким образом , но я все еще не знаю, как структурировать запрос ...любая помощь будет оценена