Did you ever try to spit out XML data from a SQL database? Of course you can use the “FOR XML AUTO” clause but it will throw you something like this:
SELECT TOP 6 ProductID, ProductName, UnitPrice FROM Products FOR XML EXPLICIT
<root> <Products ProductID="1" ProductName="Chai" UnitPrice="18.0000" /> <Products ProductID="2" ProductName="Chang" UnitPrice="19.0000" /> <Products ProductID="3" ProductName="Aniseed Syrup" UnitPrice="10.0000" /> <Products ProductID="4" ProductName="Chef Anton's Cajun Seasoning" UnitPrice="22.0000" /> <Products ProductID="5" ProductName="Chef Anton's Gumbo Mix" UnitPrice="21.3500" /> <Products ProductID="6" ProductName="Grandma's Boysenberry Spread" UnitPrice="25.0000" /> </root>
With “FOR XML EXPLICIT” you can have a little more control:
SELECT TOP 6 1 AS Tag, NULL AS parent, ProductID AS [Product!1!ID], ProductName AS [Product!1!Name!element], UnitPrice AS [Product!1!Price!element] FROM Products FOR XML EXPLICIT
<root>
<Product ID="1">
<Name>Chai</Name>
<Price>18.0000</Price>
</Product>
<Product ID="2">
<Name>Chang</Name>
<Price>19.0000</Price>
</Product>
<Product ID="3">
<Name>Aniseed Syrup</Name>
<Price>10.0000</Price>
</Product>
<Product ID="4">
<Name>Chef Anton's Cajun Seasoning</Name>
<Price>22.0000</Price>
</Product>
<Product ID="5">
<Name>Chef Anton's Gumbo Mix</Name>
<Price>21.3500</Price>
</Product>
<Product ID="6">
<Name>Grandma's Boysenberry Spread</Name>
<Price>25.0000</Price>
</Product>
</root>
But this SQL syntax is a bit odd. It gets worst when you try to add multiple level in your XML output. SQL Server 2005 provides another constrct: “FOR XML PATH”. Here is the same sample:
SELECT TOP 6
ProductID AS [@ID],
ProductName AS [Name],
UnitPrice AS [Price]
FROM Products
FOR XML PATH('Product')
This will produce the same output as the previous EXPLICIT sample but the syntax is much more understandable.
1 comment:
Nice tip. Just another demonstration of how it is impossible to know everything. I have used SQL Server for years in .Net development and never even heard of FOR XML EXPLICIT.
Thanks again!
Post a Comment