将SQL Server表数据从XML转换为JSON

时间:2016-05-19 11:42:51

标签: sql-server json xml sql-server-2012

我有一个复杂的sql,其中包含多个连接,如下所示。

select * from 
Table1 inner join Table2 on t1.id=t2.id
...
...
...
for xml path

我刚刚将结果集转换为xml,然后我尝试使用以下函数代码将xml转换为Json格式。

Create FUNCTION [uf_xmltojson] (@XMLResult XML)
RETURNS nvarchar(max)
WITH EXECUTE AS CALLER
AS
Begin
Declare  @JSONVersion NVarchar(max), @Rowcount int
Select @JSONVersion = '', @rowcount=count(*) from @XMLResult.nodes('/root/*') x(a)
Select @JSONVersion=@JSONVersion+
Stuff(
  (Select TheLine from 
    (Select ',
    {'+
      Stuff((Select ',"'+coalesce(b.c.value('local-name(.)', 'NVARCHAR(255)'),'')+'":'+
       --Replace(  -- escape double quotes
        Replace( --escape tab properly within a value
         --Replace( --escape return properly
           --Replace( --linefeed must be escaped
             Replace( --backslash too
               Replace(coalesce(b.c.value('text()[1]','NVARCHAR(MAX)'),''),--forwardslash
               '\', '\\'),   
              '/', '\/'),   
         -- CHAR(10),'\n'),   
         --CHAR(13),'\r'),   
       CHAR(09),'\t'), 
      --'"','\"')     
     +''   
     from x.a.nodes('*') b(c) 
     for xml path(''),TYPE).value('(./text())[1]','NVARCHAR(MAX)'),1,1,'')+'}'
   from @XMLResult.nodes('/root/*') x(a)
   ) JSON(theLine)
  for xml path(''),TYPE).value('.','NVARCHAR(MAX)' )
,1,1,'')
--if @Rowcount>1 Return '['+@JSONVersion+'
Return '['+@JSONVersion+'
]'
return @JSONVersion
end

我达到了预期的结果,但是获得json格式结果需要大约10到13秒。获取xml结果所需的时间是1或2秒。我知道将XML转换为Json需要相当长的时间。

任何人都可以建议我将sql server表数据转换为Json的其他最佳方法。

我试图在1或2秒内产生结果。

0 个答案:

没有答案