SQL Server使用FOR XML PATH生成XML时如何将字段值转为独立子节点
SQL Server 生成指定结构XML的实现方案
直接修改SELECT语句中payFrequency字段的生成逻辑即可,不需要额外的XML后置处理,具体实现代码如下:
declare @tbl as table ( employeeName nvarchar(50), payFrequency nvarchar(50) ) insert into @tbl select 'John', 'Monthly' union select 'Carl', 'Biweekly' select employeeName AS 'Company/Employee', ( SELECT '' AS [sql:column("payFrequency")] FOR XML PATH(''), TYPE ) AS 'Company/PayFrequency' from @tbl for xml path ('employees'), root('paySchedule')
实现原理
- 直接通过列别名指定
Company/PayFrequency路径时,FOR XML PATH会默认将字段值作为<PayFrequency>节点的文本内容,无法自动生成以字段值为名称的子节点。 - 嵌套FOR XML子查询配合
sql:column()函数,可以读取当前行的payFrequency字段值作为子节点的名称,给节点赋值空字符串即可生成对应名称的自闭合标签。 - 子查询末尾加
TYPE关键字,是为了让子查询返回原生XML类型,避免特殊字符被转义为文本。
执行上述代码后,输出的XML结构和预期完全一致:
<paySchedule> <employees> <Company> <Employee>John</Employee> <PayFrequency> <Monthly /> </PayFrequency> </Company> </employees> <employees> <Company> <Employee>Carl</Employee> <PayFrequency> <Biweekly /> </PayFrequency> </Company> </employees> </paySchedule>
内容的提问来源于stack exchange,提问作者user3561257
相关产品推荐
相关产品推荐

