如何通过SQL的FOR XML语句生成同时含属性和值的XML节点
解决方案
核心实现逻辑是利用FOR XML PATH的字段别名规则:带@前缀的别名会被识别为对应节点的属性,同节点名的非@前缀别名会被识别为节点的文本值。
固定值测试示例
直接运行以下SQL即可得到你需要的XML格式:
SELECT 'EUR' AS [Amount/@Ccy], 100.20 AS [Amount] FOR XML PATH(''), TYPE
运行输出结果:
<Amount Ccy="EUR">100.20</Amount>
实际表查询示例
如果数值和币种来自业务表,写法如下(示例表为transactions,包含currency、amount字段):
SELECT currency AS [Amount/@Ccy], amount AS [Amount] FROM transactions -- 可补充你的过滤条件 WHERE id = 1 FOR XML PATH(''), TYPE
注意事项
属性对应的字段必须写在节点值字段的前面,否则会生成两个独立的Amount节点,无法合并为同一个带属性的节点。
扩展场景:嵌套到父节点
如果需要将该节点嵌入到其他父节点中,只需要调整PATH参数即可,示例:
SELECT id AS [@TransId], currency AS [Amount/@Ccy], amount AS [Amount] FROM transactions WHERE id = 1 FOR XML PATH('Transaction'), TYPE
输出结果示例:
<Transaction TransId="1"> <Amount Ccy="EUR">100.20</Amount> </Transaction>
内容的提问来源于stack exchange,提问作者Gregory
相关产品推荐
相关产品推荐

