TSQL for xml可防止空标和自关闭标记

时间:2012-10-03 09:18:16

标签: xml tsql tags

前段时间我问了这个问题: 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中?

1 个答案:

答案 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>