Мне нужно, чтобы узлы XML исчезали, если значение равно NULL или пустой строке.
Использование {$contact/Name}
работает просто отлично, но в этом случае я не могу этого сделать.
Вот код:
DECLARE @t TABLE
(
id int,
Name varchar(20),
OfficeNumber varchar(20),
MobilePhone varchar(20),
Faxnumber varchar(20)
)
INSERT @t SELECT 1,'Liang', NULL, '654238','5478'
INSERT @t SELECT 2,'Jia','123512','45689','12565478'
INSERT @t SELECT 3,'Hui','9542654','123789','42165'
SELECT
(
SELECT
id AS [@id],
Name AS [Name],
OfficeNumber AS [phonenumber/@OfficePhone],
MobilePhone AS [phonenumber/@MobilePhone],
Faxnumber AS [phonenumber/@Faxnumber]
FROM @t AS A
FOR XML PATH('contact'),TYPE
).query('
<root>
{
for $contact in /contact
return
<contact id="{$contact/@id}">
{$contact/Name}
<PhoneNumber type="Office">{data($contact/phonenumber/@OfficePhone)}</PhoneNumber>
<PhoneNumber type="Mobile">{data($contact/phonenumber/@MobilePhone)}</PhoneNumber>
<PhoneNumber type="Fax">{data($contact/phonenumber/@Faxnumber)}</PhoneNumber>
</contact>
}
</root>
')
Токовый выход:
<root>
<contact id="1">
<Name>Liang</Name>
<PhoneNumber type="Office" />
<PhoneNumber type="Mobile">654238</PhoneNumber>
<PhoneNumber type="Fax">5478</PhoneNumber>
</contact>
...
</root>
Желаемый результат будет:
<root>
<contact id="1">
<Name>Liang</Name>
<PhoneNumber type="Mobile">654238</PhoneNumber>
<PhoneNumber type="Fax">5478</PhoneNumber>
</contact>
...
</root>
Я использую SQL Server 2008 и 2012.