废话不多说了,直接给大家贴代码了。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
|
-- create function create function [dbo].[fnXmlToJson] (@XmlData xml) returns nvarchar(max) as begin return (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)' ),,, '' ) + '}' for xml path( '' ),type).value( '.' , 'NVARCHAR(MAX)' ) ,,, '' )); end; go -- test table and data create 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" } |