SSMS:从REST调用导入数据

问题描述 投票:1回答:2

我想看看我是否可以将数据从REST调用导入到MSSQL到URL。我希望将来重用此代码用于假设存储过程。这只是想要概念证明。

这个URL有一些我可以用于实验的JSON:

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

我检查URL是否返回Postman的一些JSON:

enter image description here一切都好。

我现在关注this guide告诉我如何构建调用,这是我的代码:

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

我究竟做错了什么?

是否有人通过SSMS进行REST呼叫?

json sql-server rest tsql ssms
2个回答
1
投票

我建议你使用SSIS(SQL Server Integration Services)代替SSMS。你可以看看以下链接:

Reference Link 1

Reference Link 2


0
投票

我找到了第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个字符以上。

如果你想进一步挖掘follow my next question here,还有其他问题的空间

© www.soinside.com 2019 - 2024. All rights reserved.