retrieving xml data from sql server. using the for xml clause to retrieve data retrieving data in...

21
Retrieving XML Data from SQL server

Upload: timothy-dalton

Post on 04-Jan-2016

256 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: Retrieving XML Data from SQL server.  Using the FOR XML Clause to Retrieve Data Retrieving Data in XML Format How SQL Server Generates XML Using the

Retrieving XML Data from SQL server

Page 2: Retrieving XML Data from SQL server.  Using the FOR XML Clause to Retrieve Data Retrieving Data in XML Format How SQL Server Generates XML Using the

Using the FOR XML Clause to Retrieve Data

Retrieving Data in XML Format

How SQL Server Generates XML

Using the FOR XML Clause

Using RAW Mode to Retrieve XML

Using AUTO Mode to Retrieve XML

Demo: Using RAW and AUTO

Page 3: Retrieving XML Data from SQL server.  Using the FOR XML Clause to Retrieve Data Retrieving Data in XML Format How SQL Server Generates XML Using the

Retrieving Data in XML Format

Purchase order

HTML

Retailer

Supplier

Web site

XML

XML

Customer

Page 4: Retrieving XML Data from SQL server.  Using the FOR XML Clause to Retrieve Data Retrieving Data in XML Format How SQL Server Generates XML Using the

How SQL Server Generates XML

ROWSET

TDS/Token XML

SELECT …FROM …WHERE …FOR XML MODE

SELECT …FROM …WHERE …FOR XML MODE

Query processor

ROWSET to XML

Page 5: Retrieving XML Data from SQL server.  Using the FOR XML Clause to Retrieve Data Retrieving Data in XML Format How SQL Server Generates XML Using the

Using the FOR XML Clause

The FOR XML Clause Syntax

XML Document Fragments

SELECT select_listFROM table_sourceWHERE search_conditionFOR XML RAW | AUTO | EXPLICIT [, XMLDATA] [, ELEMENTS] [, BINARY BASE64]

SELECT select_listFROM table_sourceWHERE search_conditionFOR XML RAW | AUTO | EXPLICIT [, XMLDATA] [, ELEMENTS] [, BINARY BASE64]

<Order OrderID="10248" OrderDate="07/04/1996"/><Order OrderID="10249" OrderDate="07/05/1996"/>

<Order OrderID="10248" OrderDate="07/04/1996"/><Order OrderID="10249" OrderDate="07/05/1996"/>

Page 6: Retrieving XML Data from SQL server.  Using the FOR XML Clause to Retrieve Data Retrieving Data in XML Format How SQL Server Generates XML Using the

Using RAW Mode to Retrieve XML

Generic <row> element produced for each row returned by the query

SELECT OrderID, OrderDateFROM OrdersFOR XML RAW

SELECT OrderID, OrderDateFROM OrdersFOR XML RAW

<row OrderID="10248" OrderDate="07/04/1996"/><row OrderID="10249" OrderDate="07/05/1996"/>

<row OrderID="10248" OrderDate="07/04/1996"/><row OrderID="10249" OrderDate="07/05/1996"/>

Page 7: Retrieving XML Data from SQL server.  Using the FOR XML Clause to Retrieve Data Retrieving Data in XML Format How SQL Server Generates XML Using the

Using AUTO Mode to Retrieve XML

Table name(s) are used to name elements

SELECT OrderID, OrderDateFROM OrdersFOR XML AUTO

SELECT OrderID, OrderDateFROM OrdersFOR XML AUTO

<Orders OrderID="10248" OrderDate="07/04/1996"/><Orders OrderID="10249" OrderDate="07/05/1996"/>

<Orders OrderID="10248" OrderDate="07/04/1996"/><Orders OrderID="10249" OrderDate="07/05/1996"/>

Page 8: Retrieving XML Data from SQL server.  Using the FOR XML Clause to Retrieve Data Retrieving Data in XML Format How SQL Server Generates XML Using the

Demonstration: Using RAW and AUTO

Page 9: Retrieving XML Data from SQL server.  Using the FOR XML Clause to Retrieve Data Retrieving Data in XML Format How SQL Server Generates XML Using the

Controlling XML Output

Specifying the ELEMENTS Option

Working with Multiple Tables

Demo: Retrieving Data from Multiple Tables

Specifying the XMLDATA Option

Retrieving Binary Data

Page 10: Retrieving XML Data from SQL server.  Using the FOR XML Clause to Retrieve Data Retrieving Data in XML Format How SQL Server Generates XML Using the

Specifying the ELEMENTS Option

Columns are returned as child elements

SELECT OrderID, OrderDateFROM OrdersFOR XML AUTO, ELEMENTS

SELECT OrderID, OrderDateFROM OrdersFOR XML AUTO, ELEMENTS

<Orders> <OrderID>10248</OrderID> <OrderDate>07/04/1996</OrderDate></Orders><Orders> <OrderID>10249</OrderID> <OrderDate>07/05/1996</OrderDate></Orders>

<Orders> <OrderID>10248</OrderID> <OrderDate>07/04/1996</OrderDate></Orders><Orders> <OrderID>10249</OrderID> <OrderDate>07/05/1996</OrderDate></Orders>

Page 11: Retrieving XML Data from SQL server.  Using the FOR XML Clause to Retrieve Data Retrieving Data in XML Format How SQL Server Generates XML Using the

Working with Multiple Tables

SELECT OrderForm.OrderID, Item.ProductID Item.QuantityFROM Orders OrderForm JOIN [Order Details] ItemON OrderForm.OrderID = Item.OrderIDORDER BY OrderForm.OrderIDFOR XML RAW

SELECT OrderForm.OrderID, Item.ProductID Item.QuantityFROM Orders OrderForm JOIN [Order Details] ItemON OrderForm.OrderID = Item.OrderIDORDER BY OrderForm.OrderIDFOR XML RAW

<row OrderID="10248" ProductID="1" Quantity="12"/><row OrderID="10248" ProductID="42" Quantity="10"/>

<row OrderID="10248" ProductID="1" Quantity="12"/><row OrderID="10248" ProductID="42" Quantity="10"/>

SELECT OrderForm.OrderID, Item.ProductID Item.QuantityFROM Orders OrderForm JOIN [Order Details] ItemON OrderForm.OrderID = Item.OrderIDORDER BY OrderForm.OrderIDFOR XML AUTO

SELECT OrderForm.OrderID, Item.ProductID Item.QuantityFROM Orders OrderForm JOIN [Order Details] ItemON OrderForm.OrderID = Item.OrderIDORDER BY OrderForm.OrderIDFOR XML AUTO

<OrderForm OrderID="10248"> <Item ProductID="1" Quantity="12"/> <Item ProductID="42" Quantity="10"/></OrderForm>

<OrderForm OrderID="10248"> <Item ProductID="1" Quantity="12"/> <Item ProductID="42" Quantity="10"/></OrderForm>

Page 12: Retrieving XML Data from SQL server.  Using the FOR XML Clause to Retrieve Data Retrieving Data in XML Format How SQL Server Generates XML Using the

Demonstration: Retrieving Data from Multiple Tables

Page 13: Retrieving XML Data from SQL server.  Using the FOR XML Clause to Retrieve Data Retrieving Data in XML Format How SQL Server Generates XML Using the

Specifying the XMLDATA Option

XML-Data Reduced (XDR) Schema pre-pended to results

SELECT OrderID, OrderDateFROM OrdersFOR XML AUTO, XMLDATA

SELECT OrderID, OrderDateFROM OrdersFOR XML AUTO, XMLDATA

<Schema name="Schema1" xmlns="urn:schemas-microsoft-com:xml-data" xmlns:dt="urn:schemas-microsoft-

com:datatypes"><ElementType name="Orders" content="empty“

model="closed"><AttributeType name="OrderID" dt:type="14"/><AttributeType name="OrderDate" dt:type="dateTime"/><attribute type="OrderID"/><attribute type="OrderDate"/></ElementType></Schema>

<Schema name="Schema1" xmlns="urn:schemas-microsoft-com:xml-data" xmlns:dt="urn:schemas-microsoft-

com:datatypes"><ElementType name="Orders" content="empty“

model="closed"><AttributeType name="OrderID" dt:type="14"/><AttributeType name="OrderDate" dt:type="dateTime"/><attribute type="OrderID"/><attribute type="OrderDate"/></ElementType></Schema>

Page 14: Retrieving XML Data from SQL server.  Using the FOR XML Clause to Retrieve Data Retrieving Data in XML Format How SQL Server Generates XML Using the

Retrieving Binary Data

SELECT EmployeeID, PhotoFROM EmployeesWHERE EmployeeID = 10FOR XML AUTO

SELECT EmployeeID, PhotoFROM EmployeesWHERE EmployeeID = 10FOR XML AUTO

<Employees EmployeeID="1" Photo="dbObject/Employees[@EmpID='1']/@Photo"/>

<Employees EmployeeID="1" Photo="dbObject/Employees[@EmpID='1']/@Photo"/>

SELECT EmployeeID, PhotoFROM EmployeesWHERE EmployeeID = 1FOR XML AUTO, BINARY BASE64

SELECT EmployeeID, PhotoFROM EmployeesWHERE EmployeeID = 1FOR XML AUTO, BINARY BASE64

<Employees EmpID="1" Photo="FRwvAAIAAAANAA4AFAAhAP////9Ca ..."/>

<Employees EmpID="1" Photo="FRwvAAIAAAANAA4AFAAhAP////9Ca ..."/>

Page 15: Retrieving XML Data from SQL server.  Using the FOR XML Clause to Retrieve Data Retrieving Data in XML Format How SQL Server Generates XML Using the

Generating Custom XML Formats

Custom XML Formats

Universal Tables

Using EXPLICIT Mode

Demonstration: Universal Tables and XML

Using EXPLICIT Mode with Multiple Tables

Page 16: Retrieving XML Data from SQL server.  Using the FOR XML Clause to Retrieve Data Retrieving Data in XML Format How SQL Server Generates XML Using the

Custom XML Formats

Columns in a table that are mapped to an XML element can be represented as:

Element values

Attributes

Child elements

<Invoice InvoiceNo="10248"> <Date>1996-07-04T00:00:00</Date> <LineItem ProductID="11">Queso Cabrales</LineItem> <LineItem ProductID="42">Singaporean Fried Mee</LineItem></Invoice>

<Invoice InvoiceNo="10248"> <Date>1996-07-04T00:00:00</Date> <LineItem ProductID="11">Queso Cabrales</LineItem> <LineItem ProductID="42">Singaporean Fried Mee</LineItem></Invoice>

Page 17: Retrieving XML Data from SQL server.  Using the FOR XML Clause to Retrieve Data Retrieving Data in XML Format How SQL Server Generates XML Using the

Universal Tables

Tabular representation of an XML document

Tag and Parent columns determine hierarchy

Column names determine element / attribute mapping

Tag Parent Invoice!1!InvoiceNo

Invoice!1!Date!Element

LineItem!2!ProductID

LineItem!2

1 NULL 10248 1996-07-04T00:00:00 NULL NULL2 1 10248 NULL 11 Queso

Cabrales2 1 10248 NULL 42 Singaporean …

Page 18: Retrieving XML Data from SQL server.  Using the FOR XML Clause to Retrieve Data Retrieving Data in XML Format How SQL Server Generates XML Using the

Using EXPLICIT Mode

Construct the Transact-SQL to generate the universal table

Add the FOR XML EXPLICIT clause

SELECT 1 AS Tag, NULL AS Parent, OrderID AS [Invoice!1!InvoiceNo],

OrderDate AS [Invoice!1!Date!Element]FROM OrdersWHERE OrderID = 10248FOR XML EXPLICIT

SELECT 1 AS Tag, NULL AS Parent, OrderID AS [Invoice!1!InvoiceNo],

OrderDate AS [Invoice!1!Date!Element]FROM OrdersWHERE OrderID = 10248FOR XML EXPLICIT

<Invoice InvoiceNo="10248"> <Date>1996-07-04T00:00:00</Date></Invoice>

<Invoice InvoiceNo="10248"> <Date>1996-07-04T00:00:00</Date></Invoice>

Page 19: Retrieving XML Data from SQL server.  Using the FOR XML Clause to Retrieve Data Retrieving Data in XML Format How SQL Server Generates XML Using the

Using EXPLICIT Mode with Multiple Tables

Use the UNION ALL operator to retrieve multiple Tag values

SELECT 1 AS Tag, NULL AS Parent, OrderID AS [Invoice!1!InvoiceNo], OrderDate AS [Invoice!1!Date!Element], NULL AS [LineItem!2!ProductID], NULL AS [LineItem!2]FROM OrdersWHERE OrderID=10248UNION ALLSELECT 2 AS Tag,1 AS Parent,

OD.OrderID,NULL,OD.ProductID,P.ProductName

FROM [Order Details] OD JOIN Orders O ON OD.OrderID=O.OrderIDJOIN Products P ON OD.ProductID = P.ProductIDWHERE OD.OrderID=10248ORDER BY [Invoice!1!InvoiceNo], [LineItem!2!ProductID]FOR XML EXPLICIT

SELECT 1 AS Tag, NULL AS Parent, OrderID AS [Invoice!1!InvoiceNo], OrderDate AS [Invoice!1!Date!Element], NULL AS [LineItem!2!ProductID], NULL AS [LineItem!2]FROM OrdersWHERE OrderID=10248UNION ALLSELECT 2 AS Tag,1 AS Parent,

OD.OrderID,NULL,OD.ProductID,P.ProductName

FROM [Order Details] OD JOIN Orders O ON OD.OrderID=O.OrderIDJOIN Products P ON OD.ProductID = P.ProductIDWHERE OD.OrderID=10248ORDER BY [Invoice!1!InvoiceNo], [LineItem!2!ProductID]FOR XML EXPLICIT

Page 20: Retrieving XML Data from SQL server.  Using the FOR XML Clause to Retrieve Data Retrieving Data in XML Format How SQL Server Generates XML Using the

Demonstration: Universal Tables and XML

Page 21: Retrieving XML Data from SQL server.  Using the FOR XML Clause to Retrieve Data Retrieving Data in XML Format How SQL Server Generates XML Using the

Best Practices

Use RAW Mode for Aggregated Data

Use AUTO Mode for Attribute-Centric or Element-Centric XML

Use Aliases with AUTO and RAW to Name XML Elements and Attributes

Use an ORDER BY Clause when Querying Multiple Tables

Use EXPLICIT Mode for XML Documents Containing a Mix of Attribute-Centric and Element-Centric Mappings