SQL服务器“到XML”标记名称
问题描述:
我在查询的选择块,从表中挑出行的信号并输出XML下面的代码:SQL服务器“到XML”标记名称
select ...
...
,substring(
(
Select RC_1.Master_Code AS [TopographyTDR]
From apex.Histo_Result_Coding as RC_1
Where RC_1.Histo_Report = Histo_Result_Coding.Histo_Report
ORDER BY RC_1.Histo_report
For XML auto
), 1, 1000) [TDRCodes]
...
,这提供了一种类似于输出如下所示:
<RC_1 TopographyTDR="T77100"/><RC_1 TopographyTDR="T77100"/>
<RC_1 TopographyTDR="T01000"/><RC_1 TopographyTDR="T01000"/>
<RC_1 TopographyTDR="EGFR "/> <RC_1 TopographyTDR="GHER2"/>
<RC_1 TopographyTDR="T04020"/><RC_1 TopographyTDR="T04020"/>
<RC_1 TopographyTDR="T77100"/><RC_1 TopographyTDR="T77100"/>
这是正确的数据,但我需要标记为'TopographyTDR',而不需要RC_1。即数据应该如下:
<TopographyTDR="T77100"/><TopographyTDR="T77100"/>
<TopographyTDR="T01000"/><TopographyTDR="T01000"/>
<TopographyTDR="EGFR "/> <TopographyTDR="GHER2"/>
<TopographyTDR="T04020"/><TopographyTDR="T04020"/>
<TopographyTDR="T77100"/><TopographyTDR="T77100"/>
有没有简单的方法来做到这一点?即避免让表名出现在XML标签文本中?
在此先感谢。
答
可以使用for xml path代替for xml auto
,并明确指定标签名称。
喜欢的东西:
Select RC_1.Master_Code AS 'TopographyTDR'
From apex.Histo_Result_Coding as RC_1
Where RC_1.Histo_Report = Histo_Result_Coding.Histo_Report
ORDER BY RC_1.Histo_report
for XML path('')
更新:
在您需要的输出寻找更准确 - 它不会看起来像有效的XML。
尽管失踪根节点(它可以为简单起见被省略,我想),这种格式具有根本的问题是:标签像<TopographyTDR="T77100"/>
其实不具有标签名但只有属性TopographyTDR
具有价值T77100
。你确定你想要这样的伪XML数据?
答
你想要的格式是不允许的。 XML节点必须具有标签名称和一个或多个内容。你需要一个根...
您必须使用PATH
而不是AUTO
。看看这个:
select top 3 name
from sys.objects
for xml path(''),ROOT('root');
select top 3 name AS [@attrib]
from sys.objects
for xml path('item'),ROOT('root')
你没有更精确地看过其他的答案:-)不要紧......不,为了简单起见不可省略根节点。如果有很多项目,则必须有一个根节点才能有效! – Shnugo
通过“为了简化省略”我的意思是“省略了问题”,“在真正的XML数据”不。 –