sql 导出为 xml 相同的值
sql export to xml same values as one
我有一个名为 "Location" 的 table,如下所示:
society site floor room
---------------------------
Apple London first office
Apple London first Meeting
Apple London first Conference
Apple London second IT
Apple London second HR
Apple Rome second CCM
Apple Rome second BM
我不会将 table 导出为 xml 格式:
<LocationData>
<Society name ="Apple">
<site name ="London">
<floor name ="first">
<room>office</room>
<room>Meeting</room>
<room>Conference</room>
</floor>
<floor name ="second">
<room>IT</room>
<room>HR</room>
</floor>
</site>
<site name ="Rome">
<floor name ="second">
<room>CCM</room>
<room>BM</room>
</floor>
</site>
</society>
</LocationData>
我正在使用 sql 2008。你能帮帮我吗?谢谢问候。
运行 这在您的 sql 服务器中
SELECT * 来自位置
对于 XML 自动
这样试试(我又加了一个社团来展示1:n
结构的各个层次:
DECLARE @mockup TABLE(society VARCHAR(100),[site] VARCHAR(100),[floor] VARCHAR(100),room VARCHAR(100));
INSERT INTO @mockup VALUES
('Apple','London','first','office')
,('Apple','London','first ','Meeting')
,('Apple','London','first','Conference')
,('Apple','London','second','IT')
,('Apple','London','second','HR')
,('Apple','Rome','second','CCM')
,('Apple','Rome','second','BMD')
,('Orange','Vienna','first','Test');
SELECT m1.society AS [@name]
,(
SELECT m2.[site] AS [@name]
,(
SELECT m3.[floor] AS [@name]
,(
SELECT m4.room
FROM @mockup AS m4
WHERE m4.society=m1.society AND m4.[site]=m2.[site] AND m4.[floor]=m3.[floor]
GROUP BY m4.room
FOR XML PATH(''),TYPE
)
FROM @mockup AS m3
WHERE m3.society=m1.society AND m3.[site]=m2.[site]
GROUP BY m3.[floor]
FOR XML PATH('floor'),TYPE
)
FROM @mockup AS m2
WHERE m2.society=m1.society
GROUP BY m2.[site]
FOR XML PATH('site'),TYPE
)
FROM @mockup AS m1
GROUP BY m1.society
FOR XML PATH('Society'),ROOT('LocationData');
结果
<LocationData>
<Society name="Apple">
<site name="London">
<floor name="first">
<room>Conference</room>
<room>Meeting</room>
<room>office</room>
</floor>
<floor name="second">
<room>HR</room>
<room>IT</room>
</floor>
</site>
<site name="Rome">
<floor name="second">
<room>BMD</room>
<room>CCM</room>
</floor>
</site>
</Society>
<Society name="Orange">
<site name="Vienna">
<floor name="first">
<room>Test</room>
</floor>
</site>
</Society>
</LocationData>
我有一个名为 "Location" 的 table,如下所示:
society site floor room
---------------------------
Apple London first office
Apple London first Meeting
Apple London first Conference
Apple London second IT
Apple London second HR
Apple Rome second CCM
Apple Rome second BM
我不会将 table 导出为 xml 格式:
<LocationData>
<Society name ="Apple">
<site name ="London">
<floor name ="first">
<room>office</room>
<room>Meeting</room>
<room>Conference</room>
</floor>
<floor name ="second">
<room>IT</room>
<room>HR</room>
</floor>
</site>
<site name ="Rome">
<floor name ="second">
<room>CCM</room>
<room>BM</room>
</floor>
</site>
</society>
</LocationData>
我正在使用 sql 2008。你能帮帮我吗?谢谢问候。
运行 这在您的 sql 服务器中
SELECT * 来自位置 对于 XML 自动
这样试试(我又加了一个社团来展示1:n
结构的各个层次:
DECLARE @mockup TABLE(society VARCHAR(100),[site] VARCHAR(100),[floor] VARCHAR(100),room VARCHAR(100));
INSERT INTO @mockup VALUES
('Apple','London','first','office')
,('Apple','London','first ','Meeting')
,('Apple','London','first','Conference')
,('Apple','London','second','IT')
,('Apple','London','second','HR')
,('Apple','Rome','second','CCM')
,('Apple','Rome','second','BMD')
,('Orange','Vienna','first','Test');
SELECT m1.society AS [@name]
,(
SELECT m2.[site] AS [@name]
,(
SELECT m3.[floor] AS [@name]
,(
SELECT m4.room
FROM @mockup AS m4
WHERE m4.society=m1.society AND m4.[site]=m2.[site] AND m4.[floor]=m3.[floor]
GROUP BY m4.room
FOR XML PATH(''),TYPE
)
FROM @mockup AS m3
WHERE m3.society=m1.society AND m3.[site]=m2.[site]
GROUP BY m3.[floor]
FOR XML PATH('floor'),TYPE
)
FROM @mockup AS m2
WHERE m2.society=m1.society
GROUP BY m2.[site]
FOR XML PATH('site'),TYPE
)
FROM @mockup AS m1
GROUP BY m1.society
FOR XML PATH('Society'),ROOT('LocationData');
结果
<LocationData>
<Society name="Apple">
<site name="London">
<floor name="first">
<room>Conference</room>
<room>Meeting</room>
<room>office</room>
</floor>
<floor name="second">
<room>HR</room>
<room>IT</room>
</floor>
</site>
<site name="Rome">
<floor name="second">
<room>BMD</room>
<room>CCM</room>
</floor>
</site>
</Society>
<Society name="Orange">
<site name="Vienna">
<floor name="first">
<room>Test</room>
</floor>
</site>
</Society>
</LocationData>