我有一个复杂的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秒内产生结果。