如何为 sql 中的 NULL/空值列生成带有打开和关闭标记的 XML?
Posted
技术标签:
【中文标题】如何为 sql 中的 NULL/空值列生成带有打开和关闭标记的 XML?【英文标题】:How to generate XML with open and close tag for NULL/empty value columns in sql? 【发布时间】:2019-04-29 04:40:01 【问题描述】:我正在使用 SQL XML。我想为 sql 中的 NULL/空值列生成带有打开和关闭标记的 XML。请查找下表和查询:
表格:
雇员:
+-------+---------+
| empid | empname |
+-------+---------+
| 1 | Arul |
| 2 | Ram |
| 3 | Nivi |
+-------+---------+
工作细节:
+-------+------------+----------------+
| empid | empaddress | empemail |
+-------+------------+----------------+
| 1 | Chennai | mail1@mail.com |
| 2 | Madurai | mail2@mail.com |
| 3 | Mumbai | NULL |
+-------+------------+----------------+
Sql查询:
select A.empid,A.empname,
(select B.empaddress,isnull(B.empemail,'') as empemail from empdetail B where A.empid=B.empid for xml path('EmployeeDetails'),type)
from emp A
where A.empid=1 for xml path('root')
此查询提供如下预期数据:
<root>
<empid>1</empid>
<empname>Arul</empname>
<EmployeeDetails>
<empaddress>Chennai</empaddress>
<empemail>mail1@mail.com</empemail>
</EmployeeDetails>
</root>
但是这个查询给出了这个标签 <empemail />
当我移动到 empid 3 时:
<root>
<empid>3</empid>
<empname>Nivi</empname>
<EmployeeDetails>
<empaddress>Mumbai</empaddress>
<empemail />
</EmployeeDetails>
</root>
但我想要打开和关闭标签,即使列值为 NULL。如下:
<root>
<empid>3</empid>
<empname>Nivi</empname>
<EmployeeDetails>
<empaddress>Mumbai</empaddress>
<empemail></empemail>
</EmployeeDetails>
</root>
【问题讨论】:
根据 Xml 规范,右尖括号中的标记名是可选的。所以不应该有任何理由改变你的代码。网络库没有给出您要求的结果。我会保持原样。 【参考方案1】:<empemail />
是表示空字段的标准方式。
您可以将值替换为空格或其他值:
select e.empid, e.empname,
(select ed.empaddress, coalesce(ed.empemail, ' ') as empemail
from empdetail ed
where e.empid = ed.empid
for xml path('EmployeeDetails'), type
)
from emp e
where e.empid = 3
for xml path('root')
Here 是一个 dbfiddle。
【讨论】:
兄弟,它的工作。所以,我需要给单个空间而不是空白空间。谢谢,兄弟。以上是关于如何为 sql 中的 NULL/空值列生成带有打开和关闭标记的 XML?的主要内容,如果未能解决你的问题,请参考以下文章
数据库中的空值与NULL的区别以及python中的NaN和None