前段时间我问了这个问题: TSQL for xml xml-tag just once
现在我的问题是空标签和自闭合标签不应该出现在 xml 中。
我在这里和这里找到了可能的解决方法,但它不像我预期的那样工作。
我还尝试在每个潜在的空标签中写入“$$”,然后最后我尝试删除所有包含“$$”的标签:
SET @persons.modify('delete (//$$)')
但这种方法也不起作用。
如何使用 XQuery 删除空标签和自闭合标签或防止它们出现在 TSQL for xml 中?
这取决于您如何编写查询,但通常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>