如何在sql中为NULL /空值列生成带有open和close标记的XML?

时间:2018-11-27 12:26:30

标签: c# sql json xml

我正在使用SQL XML。我想为sql中的NULL /空值列生成带有open和close标记的XML。请找到下表并进行查询:

表格:

emp:

+-------+---------+
| 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>

1 个答案:

答案 0 :(得分:2)

<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是db <>小提琴。