IT tutorials
 
Database
 

SQL Server 2012 : Using XML Data - FOR XML (part 3) - Explicit, Path

2/10/2014 12:40:09 AM
- Free product key for windows 10
- Free Product Key for Microsoft office 365
- Malwarebytes Premium 3.7.1 Serial Keys (LifeTime) 2019

Explicit

The EXPLICIT directive of the FOR XML clause is the most powerful of the directives and provides the most control over the resulting structure of the XML. It is, however, the most difficult to figure out and understand simply because it is so complicated.

The EXPLICIT directive requires two columns in each row: Tag and Parent. The resulting data should be structured in a way that represents a hierarchical relationship between the Tag rows and the Parent rows.

Because of the complexity of the EXPLICIT directive, SQL Server 2005 introduced the PATH directive, which provides the same control over resulting XML without the headache of the syntax. Thus, you can bypass the EXPLICIT directive and go straight to the PATH directive. If you would like more information using the EXPLICIT directive, you can find information at http://msdn.microsoft.com/en-us/library/ms189068.aspx.

Path

The PATH directive was introduced in SQL Server 2005 as an alternative over the EXPLICIT directive. The PATH directive is just as powerful as the EXPLICIT directive, but it is as simple to use as the AUTO and RAW directives.

On the surface, the PATH directive may not seem powerful, but it shines and shows its supremacy when dealing with more complex XML structures, such as in working with a multilevel hierarchy.

The following is an example of how easy the PATH directive is used with several levels of hierarchy.

SELECT
o.OrderNumber AS ‘@OrderNumber',
c.Name AS ‘Customer/@Name',
i.ItemNumber AS ‘LineItems/Item/@ItemNo',
od.Quantity AS ‘LineItems/Item/@Qty'
FROM Orders o
INNER JOIN Customer c on o.customerID = c.customerid
INNER JOIN OrderDetail od on od.OrderID = o.OrderID
INNER JOIN Item i on i.ItemID = od.ItemID
FOR XML PATH('Order'), ROOT('Orders')

You can see in the query how easy it is to specify the values are attributes while including multiple joins and the resulting XML.

/*
<Orders>
<Order OrderNumber="10001">
<Customer Name="Scott" />
<LineItems>
<Item ItemNo="V001" Qty="1" />
</LineItems>
</Order>
<Order OrderNumber="10002">
<Customer Name="Adam" />
<LineItems>
<Item ItemNo="A017" Qty="1" />
</LineItems>
</Order>
<Order OrderNumber="10001">
<Customer Name="Scott" />
<LineItems>
<Item ItemNo="V001" Qty="5" />
</LineItems>
</Order>
<Order OrderNumber="10002">
<Customer Name="Adam" />
<LineItems>
<Item ItemNo="P002" Qty="2" />
</LineItems> </Order>
</Orders>
/*

To produce these same results using the EXPLICIT directive would have taken three times the amount of code. The power of the PATH directive comes from the ability to generate deep hierarchies based on simply the column name. For example, the column name LineItems/Item/@Qty creates an Item element with a Qty attribute under the LineItems element.

The PATH directive also supports a number of special characters to produce different XML formatting requirements. For example, you can create elements that have a text value as well as attributes simply by naming a column with an asterisk (*):

SELECT CustomerID AS ‘@customerid', OrderNumber AS ‘*'
FROM Orders
FOR XML PATH('Order'), ROOT('Orders')

/*
<Orders>
<Order customerid="1">10001</Order>
<Order customerid="2">10002</Order>
<Order customerid="1">10003</Order>
<Order customerid="2">10004</Order>
</Orders>
*/

Similar results can be achieved by using special column name indicators such as data() and text(). For example, you can use the data() indicator to create a list of values separated by spaces. They key here is to make the PATH name empty.

SELECT ItemNumber AS ‘data()'
FROM Item
FOR XML PATH(''), ROOT('Items')

/*
<Items>V001 A017 P002</Items>
*/

The text() indicator can produce a similar string but without spaces (also using an empty PATH name).

SELECT ItemNumber AS ‘text()'
FROM Item
FOR XML PATH(''), ROOT('Items')

/*
<Items>V001A017P002</Items>
*/

Lastly, you can add comments to your XML by applying the comments() indicator; although you still need to use the FOR XML PATH directive:

SELECT ‘Order Number' AS ‘comment()',
OrderNumber,
'CustomerID' AS ‘comment()',
CustomerID
FROM Orders WHERE OrderID = 1
FOR XML PATH(''), ROOT

/*
<Items>V001A017P002</Items>
<root>
<!--Order Number-->
<OrderNumber>10001</OrderNumber>
<!--CustomerID-->
<CustomerID>1</CustomerID>
</root>
*/
 
Others
 
 
 
Top 10
 
- Microsoft Visio 2013 : Adding Structure to Your Diagrams - Finding containers and lists in Visio (part 2) - Wireframes,Legends
- Microsoft Visio 2013 : Adding Structure to Your Diagrams - Finding containers and lists in Visio (part 1) - Swimlanes
- Microsoft Visio 2013 : Adding Structure to Your Diagrams - Formatting and sizing lists
- Microsoft Visio 2013 : Adding Structure to Your Diagrams - Adding shapes to lists
- Microsoft Visio 2013 : Adding Structure to Your Diagrams - Sizing containers
- Microsoft Access 2010 : Control Properties and Why to Use Them (part 3) - The Other Properties of a Control
- Microsoft Access 2010 : Control Properties and Why to Use Them (part 2) - The Data Properties of a Control
- Microsoft Access 2010 : Control Properties and Why to Use Them (part 1) - The Format Properties of a Control
- Microsoft Access 2010 : Form Properties and Why Should You Use Them - Working with the Properties Window
- Microsoft Visio 2013 : Using the Organization Chart Wizard with new data
Technology FAQ
- Is possible to just to use a wireless router to extend wireless access to wireless access points?
- Ruby - Insert Struct to MySql
- how to find my Symantec pcAnywhere serial number
- About direct X / Open GL issue
- How to determine eclipse version?
- What SAN cert Exchange 2010 for UM, OA?
- How do I populate a SQL Express table from Excel file?
- code for express check out with Paypal.
- Problem with Templated User Control
- ShellExecute SW_HIDE
programming4us programming4us