我有一个展平的表,其中包含表示需要以XML格式显示的组的列。示例数据:
Market, Label, Style, Type
XXX, YYY, JJJ, 111
XXX, YYY, JJJ, 222
XXX, YYY, JJJ, 333
XXX, YYY, JJJ, 444
XXX, YYY, LLL, 111
XXX, YYY, LLL, 222
XXX, YYY, LLL, 333
XXX, YYY, LLL, 444
使用T-SQL输出以下内容的最佳方式是:
<Market value=XXX>
<label value=YYY>
<Style value=JJJ>
<Type value=111>
</Type>
...
</Style>
<Style value=LLL>
...
</Style>
</label>
</Market>
我可以使用SQL Server中的XML Explicit子句吗?
答案 0 :(得分:2)
这可能会有所帮助..看看
SELECT distinct MyTable.Market "Market/@Value",
MyTable.Label "Market/Label/@Value",
MyTable.Style "Market/Label/Style/@Value",
(SELECT Type AS "Value"
FROM MyTable myTab
WHERE myTab.Market=MyTable.Market
and myTab.Label=MyTable.Label
and myTab.Style = MyTable.Style
FOR XML PATH ('')
) AS "Market/Label/Style/Type"
FROM MyTable
FOR XML PATH('')
结果XML是:
<Market Value="XXX">
<Label Value="YYY">
<Style Value="JJJ">
<Type><Value>111</Value><Value>222</Value><Value>333</Value><Value>444</Value></Type>
</Style>
</Label>
</Market>
<Market Value="XXX">
<Label Value="YYY">
<Style Value="LLL">
<Type><Value>111</Value><Value>123</Value></Type>
</Style>
</Label>
</Market>
希望有所帮助
答案 1 :(得分:1)
在T-SQL中格式化复杂的XML文档是一个愚蠢的错误。它可以完成 - 也许 - 但是一个月之后你会回到它并且你得到的东西是不可理解的。
在C#中编写方法或者处理DataReader
生成XML的方法要么容易得多,要么编写一个XSLT转换,将查询发出的XML转换为你想要的任何专用格式试图创造。
答案 2 :(得分:0)
在SQL Server 2000中有3个生成表到xml的整形方法:
对于备忘单,您可以看到link
希望这可以帮到你。答案 3 :(得分:0)
查看SQLXML库。您可以创建一个带注释的XSD文件,该文件将生成XML文档。
http://msdn.microsoft.com/en-us/library/ms172699
只是预先警告这种方法的表现非常糟糕。我已向Microsoft提出多个请求以查看此问题。我比较了手工编写“FOR XML”查询,需要几毫秒才能完成,带注释的XSD版本需要10秒。
我个人认为,如果您可以解决性能不佳的问题,带注释的XSD是一种非常优雅的解决方案。