如何修改SQL FOR XML RAW输出,将属性格式转为元素内容格式?
问题描述
我执行了如下SQL查询:
SELECT c.FirstName FROM HumanResources.Employee e INNER JOIN Person.Contact c ON c.ContactID = e.ContactID WHERE c.FirstName = 'Rob' FOR XML RAW ('Employee');
得到的结果为:
<Employee FirstName="Rob"/>
想请教是否有办法将输出格式修改为如下形式:
<Employee>Rob</Employee>
解决方案
把FOR XML RAW换成FOR XML PATH,再调整列的输出方式就能实现需求,两种写法供你参考:
- 直接指定文本内容的写法:
SELECT c.FirstName AS [text()] FROM HumanResources.Employee e INNER JOIN Person.Contact c ON c.ContactID = e.ContactID WHERE c.FirstName = 'Rob' FOR XML PATH ('Employee');
这里[text()]会让FirstName的值直接成为<Employee>元素的文本内容,而不是属性。
- 使用
ELEMENTS关键字的写法:
SELECT c.FirstName FROM HumanResources.Employee e INNER JOIN Person.Contact c ON c.ContactID = e.ContactID WHERE c.FirstName = 'Rob' FOR XML PATH ('Employee'), ELEMENTS XSINIL;
ELEMENTS会把查询结果的列转换成子元素,XSINIL是为了处理可能的NULL值,如果你的场景里不会出现NULL,也可以只写ELEMENTS。
修改后输出就会变成你想要的格式:
<Employee>Rob</Employee>
内容的提问来源于stack exchange,提问作者MonkeyKing
相关产品推荐
相关产品推荐

