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

2 回答 2

7

这是一个“仅仅因为你可以,并不意味着你应该”的例子。

SQL Server 不是这项工作的正确工具;它完全有效的事实是惊人的。如果您想加快速度,请放入 ac# 或 php 程序,让 SQL Server 完成它的预期工作。处理 JSON 响应不是其中之一。

于 2013-10-10T23:31:15.033 回答
2

EJ解释得很好,我同意他的看法。

我想补充一点,如果您想将所有内容保存在数据库代码中,您可以尝试CLR 过程,这些过程本质上是用 C# 编写的,但在 SQL Server 中工作。

有关如何在 C# 中执行此操作的详细信息,请参阅这些链接

带有 post 的 HTTP 请求
如何使用 Visual C# 发出 GET 请求

于 2013-10-11T13:47:04.843 回答