我正在使用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>
答案 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 <>小提琴。