废话不多说了,直接给大家贴代码了。
-- create functioncreate function [dbo].[fnXmlToJson] (@XmlData xml)returns nvarchar(max)asbeginreturn(select stuff( (select*from (select",{"+ stuff((select",""+coalesce(b.c.value("local-name(.)", "NVARCHAR(MAX)"),"")+"":""+ b.c.value("text()[]","NVARCHAR(MAX)") +"""from x.a.nodes("*") b(c) for xml path(""),type).value("(./text())[]","NVARCHAR(MAX)"),,,"")+"}"from @XmlData.nodes("/root/*") x(a)) JSON(theLine) for xml path(""),type).value(".","NVARCHAR(MAX)" ),,,""));end;go-- test table and datacreate table [dbo].[PivotExample]([Country] [nvarchar]() null,[Year] [smallint] not null,[SalesAmount] [money] null)on[PRIMARY];insert into [dbo].[PivotExample]values("Australia", , .);insert into [dbo].[PivotExample]values("Germany", , .);insert into [dbo].[PivotExample]values("United States", , .);insert into [dbo].[PivotExample]values("France", , .);declare @xml xml;set @xml=(select top * from [dbo].[PivotExample] for xml path, root);select dbo.fnXmlToJson(@xml);--return string{"Country":"Australia","Year":"","SalesAmount":"."},{"Country":"Germany","Year":"","SalesAmount":"."},{"Country":"United States","Year":"","SalesAmount":"."},{"Country":"France","Year":"2008","SalesAmount":"922179.0400"}