SSMS:从REST调用中导入数据

弗朗切斯科·曼托瓦尼(Francesco Mantovani)

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

该URL有一些可用于实验的JSON:

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

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

在此处输入图片说明 都好。

现在我按照此指南进行操作该指南告诉我如何构造调用,这是我的代码:

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列。

在此处输入图片说明

我究竟做错了什么?

有没有人通过SSMS发出REST呼叫?

弗朗切斯科·曼托瓦尼(Francesco Mantovani)

我在第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

在此处输入图片说明

但是问题仍然存在于8000个字符以上。

还有另一个问题的空间,如果您想进一步探讨,请在这里关注我的下一个问题

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章