- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
通过 SSMS 调用 REST 服务确实不是一个好主意。
顺便说一句,自从微软创建了 Stored Procedure sp_OAMethod甚至来自 Red Gate 的 Phil Factor show us how to use it我想试一试。
我想从 OpenStreetMap 中直接导入一些数据到 MSSQL,所以我复制了一个很好的查询 from here我根据自己的意愿进行调整。
在这个例子中,我将返回 Nelson 的所有电影院:
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
非常简单,我可以在 Postman 和 SSMS 中看到 REST 调用响应:
当我尝试从像奥克兰这样的大城市检索所有电影院时,问题就出现了:
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 个字符 和直到 2GB 的数据吗?
我应该改用什么?
有没有办法拆分数据并稍后连接?
编辑:我想我越来越接近了:我可以使用 OPENJSON this way ,但我仍然不知道如何构建查询...任何帮助将不胜感激
最佳答案
我在给自己鼓掌。
我承认,这是一个噩梦般的解决方案,但它可以解决问题。解决方案是设置:
将@Response 声明为表(Json_Table nvarchar(max))
通过这种方式,我创建了一个数据类型为 nvarchar(max)
的表,现在是的,它可以容纳 65,535 个字符,直到 2GB 的数据。
Declare @Object as Int;
DECLARE @hr int
Declare @Response as table(Json_Table nvarchar(max))
Exec @hr=sp_OACreate 'MSXML2.ServerXMLHTTP.6.0', @Object OUT;
Exec @hr=sp_OAMethod @Object, 'open', NULL, 'get',
'http://overpass-api.de/api/interpreter?data=[out:json];area[name="Auckland"]->.a;(node(area.a)[amenity=cinema];way(area.a)[amenity=cinema];rel(area.a)[amenity=cinema];);out;', --Your Web Service Url (invoked)
'false'
Exec @hr=sp_OAMethod @Object, 'send'
Exec @hr=sp_OAMethod @Object, 'responseText', @Response OUTPUT
INSERT into @Response (Json_Table) exec sp_OAGetProperty @Object, 'responseText'
select * from @Response
EXEC sp_OADestroy @Object
如果您找到更好的解决方案,请发布,我们将不胜感激。
关于rest - SSMS 和 sp_OAMethod : is there a Data Type greater than VARCHAR(8000)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52588498/
即使在我正在使用的 Microsoft 网站上,我似乎也能找到答案: EXECUTE @RetCode = sp_OAMethod @FileSystem, 'OpenTextFile', @Fi
我被告知在 SQL Server 2000 中使用 SP_OACreate 和 SP_OAMethod 存在安全风险。 我在程序集中使用强名称并存储在 SQL Server 计算机上的 GAC 中。
我被告知在 SQL Server 2000 中使用 SP_OACreate 和 SP_OAMethod 存在安全风险。 我在程序集中使用强名称并存储在 SQL Server 计算机上的 GAC 中。
我正在尝试使用可以将输入传递给的存储过程使用 Transact-SQL 写入文件。但是,每次我在 SQL Server 2012 中运行命令时,它都会显示 Command(s) completed s
Win2003 + SQL Server 2005 的工作代码在 Win2012 + SQL Server 2012 sp1 下不起作用。 唯一的~真实的solution我发现是: I copied
我们正在尝试检索由私有(private)第三方 WebAPI 提供的一些 JSON 结果。出于某种原因,其中一个调用每次都返回 NULL。如果我们使用不同的 URI 调用来访问不同的信息,它就可以工作
我正在使用 Microsoft SQL Server 2008 R2,我尝试通过 bcp(带有预定作业)转储一个表。首先,我用 xp_cmdshell 实现了它,但我听说,出于安全原因,应该避免这种情
通过 SSMS 调用 REST 服务确实不是一个好主意。 顺便说一句,自从微软创建了 Stored Procedure sp_OAMethod甚至来自 Red Gate 的 Phil Factor s
通过 SSMS 调用 REST 服务确实不是一个好主意。 顺便说一句,自从微软创建了 Stored Procedure sp_OAMethod甚至来自 Red Gate 的 Phil Factor s
我是一名优秀的程序员,十分优秀!