如何在SQL Server中从URL读取JSON数据

3

我正在尝试使用以下代码在SQL Server 2008中从URL读取JSON数据:

DECLARE @temp table (RowNum int, DATA NVARCHAR(max))
DECLARE @url VARCHAR(MAX),
@win INT,
@hr INT,
@Text VARCHAR(8000),
@RowID int,
@Status smallint,
@Accuracy tinyint

Set @url = 'http://www.jsonprovider.com/api/json/2020'
EXEC @hr = sp_OACreate 'WinHttp.WinHttpRequest.5.1', @win OUT
IF @hr <> 0 EXEC sp_OAGetErrorInfo @win

EXEC @hr = sp_OAMethod @win, 'Open', NULL, 'GET', @url, 'false'
IF @hr <> 0 EXEC sp_OAGetErrorInfo @win

EXEC @hr = sp_OAMethod @win, 'Send'
IF @hr <> 0 EXEC sp_OAGetErrorInfo @win

EXEC @hr = sp_OAGetProperty @win, 'ResponseText', @Text OUT
IF @hr <> 0 EXEC sp_OAGetErrorInfo @win

EXEC @hr = sp_OADestroy @win 
IF @hr <> 0 EXEC sp_OAGetErrorInfo @win 

select  @Text  --<< Result

我得到了我的结果。

问题在于使用SQL Server获得这个结果需要7秒钟的时间,但是在通过C#应用程序普通调用和在web浏览器中调用时,我可以在0.06秒内获得结果。

我正在寻找一种改进代码以获得快速结果的解决方案。


4
你试图直接从网页中读取JSON数据并将其存入SQL?为什么不在C#中读取并传递数据呢?根据你提供的数据,这样会更快。 - gunr2171
我成功地使用了这段代码,通过将OLE对象名称更改为MSXML2.ServerXMLHTTP来从URL读取JSON文本,并获得了快速的结果。 - David
2个回答

7
这是一个“会用不代表应该用”的例子。
SQL Server并不适合这个工作,它能够工作已经很神奇了。如果想加速处理,可以将其放入C#或PHP程序中,让SQL Server执行其预期的工作。处理JSON响应不是SQL Server擅长的领域。

好的,我做到了这里??? - akaco
3
这是“这不是一个答案”的示例。 - Alesis Joan

2

E.J.已经很好地解释了,我同意他的看法。

我想补充说,如果你想将所有内容都保存在数据库代码中,你可以尝试使用CLR过程,它们本质上是用C#编写的,但可以在SQL Server内部工作。

以下链接详细介绍了如何在C#中实现此操作:

使用POST进行HTTP请求
如何使用Visual C#发出GET请求


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接