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

时间:2013-10-10 23:08:00

标签: c# sql sql-server json

我正在尝试使用以下代码从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秒。

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

2 个答案:

答案 0 :(得分:5)

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

SQL Server不适合这项工作;事实上,它的工作原理是惊人的。如果你想加快速度,请加入c#或php程序,让SQL服务器完成它的工作。处理jSON响应不是其中之一。

答案 1 :(得分:1)

E.J。解释得很清楚,我同意他的意见。

我想补充一点,如果你想保留数据库代码中的所有内容,可以尝试使用C#编写的CLR procedures,但在SQL Server中工作。

有关如何在C#

中执行此操作的详细信息,请参阅这些链接

HTTP request with post
How to make a GET request by using Visual C#