前段时间我问了这个问题: TSQL for xml xml-tag just once
现在我遇到的问题是,空白和自动关闭标签不应出现在xml中。
我找到了一些东西,但它没有像我期望的那样起作用:http://www.sqlmusings.com/2009/04/12/sqlxml-how-to-work-with-xml-elements-or-nodes-in-sql-server/
或
http://blogs.msdn.com/b/denisruc/archive/2006/05/17/600250.aspx
我在每个潜在的空标签中写了“$$”,最后我尝试用“$$”删除所有标签:
SET @persons.modify('delete (//$$)')
但它不会这样。
如何使用XQuery删除空标签和自关闭标签,或者阻止它们出现在TSQL for xml中?
答案 0 :(得分:1)
这取决于您编写查询的方式,但通常null
值不包含在生成的XML中,因此如果要省略空值,可以使用nullif
获取空值而不是空值
declare @Person table
(
Name varchar(20)
)
insert into @Person values ('Person1')
insert into @Person values ('Person2')
insert into @Person values ('')
insert into @Person values (null)
select '2012' as period,
(
select nullif(Person.Name, '') as 'users/person'
from @Person as Person
for xml path('') , type
)
for xml path(''), root('company')
结果:
<company>
<period>2012</period>
<users>
<person>Person1</person>
</users>
<users>
<person>Person2</person>
</users>
</company>