废话不多说了,直接给大家贴代码了。
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" }
|