【发布时间】:2018-03-23 23:02:26
【问题描述】:
我尝试结束我的 SQL 以获得提要输出...但我又遇到了一个复杂问题。首先,我要感谢我不是用于 XML 输出的 SQL 专家……但希望得到某人的帮助。
使用这个查询
SELECT
1487997 as ExternalId,
'This is a name' as [Name]
INTO #sample
DROP TABLE #colors
SELECT
1487997 as ExternalId,
'BV_FE_FAMILY:Green' as [Color]
INTO #colors
UNION
SELECT
1487997 as ExternalId,
'Green' as [Color]
SELECT
1 as Tag,
NULL as Parent,
NULL AS [EliminaTAG!1], -- empty root element
NULL AS [Product!2!ExternalId!element],
NULL AS [Product!2!Name!cdata],
NULL AS [Product!2!]
UNION ALL
SELECT
2 AS Tag,
1 AS Parent,
NULL,
ExternalId,
[Name],
(
SELECT
c.[Color] as Value
FROM #colors c
WHERE (ff.ExternalId = c.ExternalId)
FOR XML PATH('Attribute'), ROOT('Attributes'), TYPE)
FROM #sample ff
FOR XML EXPLICIT
我已经接近我的范围...但我需要一个 id="BV_FE_FAMILY" 和 id="BV_FE_EXPAND" 进入 TAG...
<Attributes>
<Attribute id="BV_FE_FAMILY">
<Value>Green</Value>
<Attribute>
<Attribute id="BV_FE_EXPAND">
<Value>BV_FE_FAMILY:Green</Value>
<Attribute>
</Attributes>
我的结果是……错过“ID=.....”
<EliminaTAG>
<Product>
<ExternalId>1487997</ExternalId>
<Name><![CDATA[This is a name]]></Name>
<Attributes xmlns="">
<Attribute>
<Value>Green</Value>
</Attribute>
<Attribute>
<Value>BV_FE_FAMILY:Green</Value>
</Attribute>
</Attributes>
</Product>
</EliminaTAG>
感谢所有能给我正确建议的人。 意大利阿伦
【问题讨论】:
-
FOR XML EXPLICIT是一个真正的头痛...您可能需要它的唯一原因是CDATA部分。如果这不是外部强制要求,您应该使用FOR XML PATH解决此问题。在语义上,CDATA部分和正确转义的 normaltext()节点之间没有区别。
标签: sql xml attributes tags