[edit]: added RAW test and best code example
I need to create XML for an obsolete application running under SQL Server 2005, and I hope to use the function FOR XML
.
However, I cannot get rid of empty elements when the outer join returns null.
I have created some test data below.
As a result, I get (AUTO):
<n id="1" Name="test1">
<s SubName="sub1" />
<s SubName="sub2" />
</n>
<n id="2" Name="test2">
<s />
</n>
As a result, I get (RAW):
<row id="1" Name="test1" SubName="sub1" />
<row id="1" Name="test1" SubName="sub2" />
<row id="2" Name="test2" />
As a result, I want:
<n id="1" Name="test1">
<s SubName="sub1" />
<s SubName="sub2" />
</n>
<n id="2" Name="test2" />
Test code:
IF OBJECT_ID('tempdb..
SELECT * INTO
SELECT 1 id, 'test1' Name UNION ALL
SELECT 2 id, 'test2' Name )t
IF OBJECT_ID('tempdb..#sub') IS NOT NULL BEGIN DROP TABLE
SELECT * INTO
SELECT 1 id, 'sub1' SubName UNION ALL
SELECT 1 id, 'sub2' SubName )t
SELECT n.id
, n.Name
, s.SubName
FROM
LEFT OUTER JOIN
FOR XML AUTO
SELECT n.id
, n.Name
, s.SubName
FROM
LEFT OUTER JOIN
FOR XML RAW
kesse source
share