SlideShare a Scribd company logo
What’s New for XML in SQL Server 2008?<br />White Paper<br />Published: August 2008<br />Summary: Microsoft® SQL Server™ 2008 builds on the extensive support for XML by extending support for XML schema validation and XQuery, and by enhancing the xml data type.<br />.<br />Contents<br /> TOC \o \"
1-2\"
 Introduction PAGEREF _Toc205573720 \h 1<br />The Evolution of SQL Server XML Capabilities PAGEREF _Toc205573721 \h 1<br />XML Functionality in SQL Server 2000 PAGEREF _Toc205573722 \h 1<br />XML Functionality in SQL Server 2005 PAGEREF _Toc205573723 \h 2<br />XML Functionality in SQL Server 2008 PAGEREF _Toc205573724 \h 5<br />XML Schema Validation Enhancements PAGEREF _Toc205573725 \h 5<br />Lax Validation Support PAGEREF _Toc205573726 \h 6<br />Full xs:dateTime Support PAGEREF _Toc205573727 \h 7<br />Union and List Types PAGEREF _Toc205573728 \h 8<br />XQuery Enhancements PAGEREF _Toc205573729 \h 10<br />XML DML Enhancements PAGEREF _Toc205573730 \h 11<br />Conclusion PAGEREF _Toc205573731 \h 12<br />Introduction<br />Microsoft introduced XML-related capabilities in Microsoft SQL Server 2000 with the FOR XML and OPENXML Transact-SQL keywords, which enabled developers to write Transact-SQL code to retrieve a query result as a stream of XML, and to shred an XML document into a rowset. These XML capabilities were extended significantly in SQL Server 2005 with the introduction of a native xml data type that supports XSD schema validation, XQuery-based operations, and XML indexing. SQL Server 2008 builds on the XML capabilities of previous releases and provides enhancements to meet the challenges that customers have faced when storing and manipulating XML data in the database.<br />The Evolution of SQL Server XML Capabilities<br />The XML features of SQL Server have evolved with each version of SQL Server since SQL Server 2000. Before we examine the enhancements in SQL Server 2008, it might be useful to chart the evolution of XML functionality through the previous versions.<br />XML Functionality in SQL Server 2000<br />In SQL Server 2000, Microsoft introduced the FOR XML and OPENXML Transact-SQL keywords. FOR XML is an extension to the SELECT statement that returns the query results as a stream of XML as shown in the following example.<br />SELECT ProductID, ProductName<br />FROM Products Product<br />FOR XML AUTO<br />This query returns an XML fragment like the following example.<br /><Product ProductID=\"
1\"
 ProductName=\"
Widget\"
/><br /><Product ProductID=\"
2\"
 ProductName=\"
Sprocket\"
/><br />The OPENXML function performs the opposite function to the FOR XML clause by creating a rowset from an XML document, as shown in the following example.<br />DECLARE @doc nvarchar(1000)<br />SET @doc = '<Order OrderID = \"
1011\"
><br /><Item ProductID=\"
1\"
 Quantity=\"
2\"
/><br /><Item ProductID=\"
2\"
 Quantity=\"
1\"
/><br /></Order>'<br />DECLARE @xmlDoc integer<br />EXEC sp_xml_preparedocument @xmlDoc OUTPUT, @doc<br />SELECT * FROM<br />OPENXML (@xmlDoc, 'Order/Item', 1)<br />WITH<br />(OrderID integer '../@OrderID',<br /> ProductID integer,<br /> Quantity integer)<br />EXEC sp_xml_removedocument @xmlDoc<br />Note the use of the sp_xml_preparedocument and sp_xml_removedocument stored procedures to create an in-memory representation of the node tree for the XML document. This Transact-SQL code returns the following rowset.<br />OrderIDProductIDQuantity101112101121<br />XML Functionality in SQL Server 2005<br />In SQL Server 2005, the FOR XML feature was enhanced with new options for root elements and element names, the ability to nest FOR XML calls so you can build complex hierarchies, and a new PATH mode that enables you to define the structure of the XML to be retrieved by using XPath syntax, as shown in the following example.<br />SELECT ProductID AS '@ProductID',<br />ProductName AS 'ProductName'<br />FROM Products<br />FOR XML PATH ('Product'), ROOT ('Products')<br />This query returns the following XML.<br /><Products><br /><Product ProductID=\"
1\"
><br /><ProductName>Widget</ProductName><br /></Product><br /><Product ProductID=\"
2\"
><br /><ProductName>Sprocket</ProductName><br /></Product><br /></Products><br />In addition to enhancing the existing XML features that had been introduced in SQL Server 2000, SQL Server 2005 added a new, native xml data type that enables you to create variables and columns for XML data, as shown in the following example.<br />CREATE TABLE SalesOrders<br />(OrderID integer PRIMARY KEY,<br /> OrderDate datetime,<br /> CustomerID integer,<br /> OrderNotes xml)<br />You can use the xml data type to store markup documents or semi-structured data in the database. Columns and variables can be used for untyped XML or typed XML, the latter of which is validated against an XML Schema Definition (XSD) schema. To define the schemas for data validation, developers can use the CREATE XML SCHEMA COLLECTION statement, as shown in the following example.<br />CREATE XML SCHEMA COLLECTION ProductSchema AS<br />'<?xml version=\"
1.0\"
 encoding=\"
UTF-16\"
?><br /><xs:schema xmlns:xs=\"
http://www.w3.org/2001/XMLSchema\"
><br />  <!-- schema declarations go here --><br /></xs:schema>'<br />After creating a schema collection, you can associate an xml variable or column with the schema declarations it contains by referencing the schema collection as shown in the following example.<br />CREATE TABLE SalesOrders<br />(OrderID integer PRIMARY KEY,<br /> OrderDate datetime,<br /> CustomerID integer,<br /> OrderNotes xml(ProductSchema))<br />Typed XML is validated against the declarations in the associated schema collection when values are inserted or updated, which makes it possible to enforce business rules about the structure of XML data for compliance or compatibility reasons.<br />The xml data type also provides a number of methods, which you can use to query and manipulate the XML data in an instance. For example, you can use the query method to query the XML in an instance of the xml data type, as shown in the following example.<br />declare @x xml<br />set @x=<br />'<Invoices><br /><Invoice><br /><Customer>Kim Abercrombie</Customer><br /><Items><br /><Item ProductID=\"
2\"
 Price=\"
1.99\"
 Quantity=\"
1\"
 /><br /><Item ProductID=\"
3\"
 Price=\"
2.99\"
 Quantity=\"
2\"
 /><br /><Item ProductID=\"
5\"
 Price=\"
1.99\"
 Quantity=\"
1\"
 /><br /></Items><br /></Invoice><br /><Invoice><br /><Customer>Margaret Smith</Customer><br /><Items><br /><Item ProductID=\"
2\"
 Price=\"
1.99\"
 Quantity=\"
1\"
/><br /></Items><br /></Invoice><br /></Invoices>'<br />SELECT @x.query(<br />'<CustomerList><br />{<br />for $invoice in /Invoices/Invoice<br />return $invoice/Customer<br />}<br /></CustomerList>')<br />The query in this example uses an XQuery expression that finds each Invoice element in the document and returns an XML document that contains the Customer element from each Invoice element, as shown in the following example.<br /><CustomerList><br />  <Customer>Kim Abercrombie</Customer><br />  <Customer>Margaret Smith</Customer><br /></CustomerList><br />Another significant XML-related feature that was introduced in SQL Server 2005 is support for XML indexes. You can create primary and secondary XML indexes for columns of type xml to enhance XML query performance. A primary XML index is a shredded representation of all of the nodes in an XML instance, which the query processor can use to quickly find nodes within an XML value. After you have created a primary XML index, you can create secondary XML indexes to improve the performance of specific types of query. The following example creates a primary XML index, and a secondary XML index of type PATH, which can improve performance of queries that use XPath expressions to identify nodes in an XML instance.<br />CREATE PRIMARY XML INDEX idx_xml_Notes<br />ON SalesOrders (Notes)<br />GO<br />CREATE XML INDEX idx_xml_Path_Notes<br />ON SalesOrders (Notes)<br />USING XML INDEX idx_xml_Notes<br />FOR PATH<br />GO<br />XML Functionality in SQL Server 2008<br />The XML functionality that was introduced in SQL Server 2000 and SQL Server 2005 has been enhanced in SQL Server 2008. Key XML-related enhancements in SQL Server 2008 include:<br />Improved schema validation capabilities<br />Enhancements to XQuery support<br />Enhanced functionality for performing XML data manipulation language (DML) insertions<br />The rest of this whitepaper examines these enhancements and demonstrates how you can use them to implement better XML solutions in SQL Server 2008.<br />XML Schema Validation Enhancements<br />You can validate XML data by enforcing compliance with one or several XSD schemas. A schema defines the permissible XML elements and attributes for a particular XML data structure, and is often used to ensure that XML documents contain all of the required data elements in the correct structure.<br />SQL Server 2005 introduced validation of XML data through the use of XML schema collections. The general approach is to a create schema collection that contains the schema rules for your XML data by using the CREATE XML SCHEMA COLLECTION statement, and then to reference the schema collection name when you define an xml column or variable that must conform to the schema rules in the schema collection. SQL Server then validates any data that is inserted or updated in the column or variable against the schema declarations in the schema collection.<br />XML Schema support in SQL Server 2005 implemented a broad subset of the full XML Schema specification, and covered the most common XML validation scenarios. SQL Server 2008 extends that support to include the following additional schema validation requirements that have been identified by customers:<br />Support for lax validation<br />Full support for dateTime, time and date validation, including preservation of time zone information<br />Improved Support for union and list types<br />Lax Validation Support<br />XML Schemas support wildcard sections in XML documents through the any, anyAttribute, and anyType declarations. For example, consider the following XML schema declaration.<br /><xs:complexType name=\"
Order\"
 mixed=\"
true\"
><br />  <xs:sequence><br />    <xs:element name=\"
CustomerName\"
/><br />    <xs:element name=\"
OrderTotal\"
/><br />    <xs:any namespace=\"
##other\"
 processContents=\"
skip\"
 <br />minOccurs=\"
0\"
 maxOccurs=\"
unbounded\"
/><br />  </xs:sequence><br /></xs:complexType><br />This schema declaration defines an XML element named Order, which must contain sub-elements named CustomerName and OrderTotal. Additionally, the element can contain an unlimited number of other elements that belong to a different namespace than the one to which the Order type belongs. The following XML shows an XML document that contains an instance of an Order element as defined by this schema declaration. Note that the order also contains a shp:Delivery element, which is not explicitly defined in the schema.<br /><Invoice xmlns=\"
http://adventure-works.com/order\"
<br />xmlns:shp=\"
http://adventure-works.com/shipping\"
><br />  <Order><br />    <CustomerName>Graeme Malcolm</CustomerName><br />    <OrderTotal>299.99</OrderTotal><br />    <shp:Delivery>Express</shp:Delivery><br />  </Order><br /></Invoice><br />Validation for wildcard sections depends on the processContents attribute for the wildcard section in the schema definition. In SQL Server 2005, schemas can use processContents values of skip and strict for any and anyAttribute declarations. In the previous example, the processContents attribute for the wildcard element has been set to skip, so no attempt to validate the contents of that element is made. Even if the schema collection includes a declaration for the shp:Delivery element (for example, defining a list of valid delivery methods), the element is not validated unless the declaration for the wildcard in the Order element has its processContents attribute set to strict.<br />SQL Server 2008 adds support for a third validation option. By setting the processContents attribute for a wildcard section to lax, you can enforce validation for any elements that have schema declarations associated with them, but ignore any elements that are not defined in the schema. To continue the previous example, if you set the processContents attribute for the wildcard element declaration in the schema to lax and add a declaration for the shp:Delivery element, shp:Delivery element in the XML document is validated. However, if instead of the shp:Delivery element, the document includes an element that is not defined in the schema, the element is ignored.<br />In addition, the XML Schema specification defines that the anyType declaration has lax processing of its content model. SQL Server 2005 does not support lax processing, so the content is validated strictly instead. SQL Server 2008 does support lax processing of the anyType contents, and so the content is validated correctly.<br />Full xs:dateTime Support<br />You can use the dateTime data type in an XML schema to define date and time data. Date and time data is expressed in the format 2007-08-01T09:30:00:000Z, which represents the 1st of August 2007 at 9:30 in the morning in the coordinated universal time zone (UTC), which is indicated by the Z. Other time zones are represented by the time difference from UTC, so for example you can represent 6:00 in the morning on December 25th 2007 in Pacific Standard Time (which is 8 hours behind UTC) with the value 2007-12-25T06:00:00:000-8:00.<br />The XML Schema specification defines the time zone component of the dateTime, date and time data types as optional. However, in SQL Server 2005 you must provide a time zone for dateTime, time and date data. Additionally, SQL Server 2005 does not preserve the time zone information for your data for dateTime or time, but normalizes it to UTC (so for example, if your XML contains the value 2007-12-25T06:00:00:000-8:00, SQL Server 2005 normalizes this as 2007-12-25T14:00:00:000Z.) In SQL Server 2008, these limitations have been removed, so you can omit the time zone information when you store dateTime, date or time data, and any time zone information that you do provide is preserved.<br />Union and List Types<br />You can use XML schemas to define data types for your XML data that allow a limited set of values to be assigned to multi-value elements and attributes. For example, you might define a sizeListType type that restricts the list of possible values that can be assigned to an AvaliableSizes element in the product definition to S, M, and L. SQL Server 2005 supports XML schemas that contain these simple type definitions and restrictions. For example, you can use a list type to define the valid sizes for a product as shown in the following example.<br /><xs:simpleType name=\"
sizeListType\"
><br />  <xs:list><br />    <xs:simpleType><br />      <xs:restriction base=\"
xs:string\"
><br />        <xs:enumeration value=\"
S\"
/><br />        <xs:enumeration value=\"
M\"
/><br />        <xs:enumeration value=\"
L\"
/><br />      </xs:restriction><br />    </xs:simpleType><br />  </xs:list><br /></xs:simpleType><br />This schema declaration enables you to create an element that lists all of the sizes in which a product can be purchased as a list of values separated by white space, as shown in the following example:<br /><AvailableSizes>S M L</AvailableSizes><br />However, what if you want to support two different ways to express the size of a product? For example, suppose a cycling equipment retailer sells cycling clothes in small, medium, and large sizes, but also sells bicycles in numerical sizes relating to the frame size (such as 18, 20, 22, and 24)? To enable you to accomplish this, SQL Server 2008 adds support for union types that contain list types, which you can use to merge multiple list type definitions and restrictions into a single type. For example, the following Transact-SQL code creates an XML schema collection that defines a productSizeType type in which valid values include a list of numeric sizes (18, 20, 22, and 24) and a list of named sizes (S, M, and L).<br />CREATE XML SCHEMA COLLECTION CatalogSizeSchema AS<br />N'<?xml version=\"
1.0\"
 encoding=\"
UTF-16\"
?><br /><xs:schema xmlns:xs=\"
http://www.w3.org/2001/XMLSchema\"
><br /><xs:simpleType name=\"
productSizeType\"
><br /><xs:union><br /><xs:simpleType><br />  <xs:list><br /><xs:simpleType><br />  <xs:restriction base=\"
xs:integer\"
><br /><xs:enumeration value=\"
18\"
/><br /><xs:enumeration value=\"
20\"
/><br /><xs:enumeration value=\"
22\"
/><br /><xs:enumeration value=\"
24\"
/><br />  </xs:restriction><br /></xs:simpleType><br />  </xs:list><br /></xs:simpleType><br /><xs:simpleType><br />  <xs:list><br /><xs:simpleType><br />  <xs:restriction base=\"
xs:string\"
><br /><xs:enumeration value=\"
S\"
/><br /><xs:enumeration value=\"
M\"
/><br /><xs:enumeration value=\"
L\"
/><br />  </xs:restriction><br /></xs:simpleType><br />  </xs:list><br /></xs:simpleType><br /></xs:union><br /></xs:simpleType><br /></xs:schema>'<br />With this declaration in the schema, any elements based on the productSizeType can contain either kind of list; so both of the product elements in the following example would be valid instances of the productSizeType data type.<br /><Catalog><br />  <Product><br />    <ProductName>Road Bike</ProductName><br />    <AvailableSizes>22 24</AvailableSizes><br />  </Product><br />  <Product><br />    <ProductName>Cycling Jersey</ProductName><br />    <AvailableSizes>S M L</AvailableSizes><br />  </Product><br /></Catalog><br />Similarly, SQL Server 2008 supports schema declarations for list types that contain union types.<br />XQuery Enhancements<br />SQL Server 2005 introduced the xml data type, which provides a number of methods that you can use to perform operations on the XML data stored in a column or variable. Most of the operations you can perform use XQuery syntax to navigate and manipulate the XML data. The XQuery syntax supported by SQL Server 2005 includes the for, where, order by, and return clauses of the so called FLWOR expression, which you can use to iterate over the nodes in an XML document and return values.<br />SQL Server 2008 adds support for the let clause, which is used to assign values to variables in an XQuery expression such as the following example:<br />declare @x xml<br />set @x=<br />'<Invoices><br /><Invoice><br /><Customer>Kim Abercrombie</Customer><br /><Items><br /><Item ProductID=\"
2\"
 Price=\"
1.99\"
 Quantity=\"
1\"
 /><br /><Item ProductID=\"
3\"
 Price=\"
2.99\"
 Quantity=\"
2\"
 /><br /><Item ProductID=\"
5\"
 Price=\"
1.99\"
 Quantity=\"
1\"
 /><br /></Items><br /></Invoice><br /><Invoice><br /><Customer>Margaret Smith</Customer><br /><Items><br /><Item ProductID=\"
2\"
 Price=\"
1.99\"
 Quantity=\"
1\"
/><br /></Items><br /></Invoice><br /></Invoices>'<br />SELECT @x.query(<br />'<Orders><br />{<br />for $invoice in /Invoices/Invoice<br />let $count :=count($invoice/Items/Item)<br />order by $count<br />return<br /><Order><br />{$invoice/Customer}<br /><ItemCount>{$count}</ItemCount><br /></Order><br />}<br /></Orders>')<br />This example returns the following XML.<br /><Orders><br /><Order><br /><Customer>Margaret Smith</Customer><br /><ItemCount>1</ItemCount><br /></Order><br /><Order><br /><Customer>Kim Abercrombie</Customer><br /><ItemCount>3</ItemCount><br /></Order><br /></Orders><br />Note that SQL Server 2008 does not allow the assignment of constructed elements.<br />XML DML Enhancements<br />As well as being able to use XQuery expressions to perform operations on XML data, the xml data type supports the XML DML expressions insert, replace value of, and delete through its modify method. You can use these XML DML expressions to manipulate the XML data in an xml column or variable.<br />SQL Server 2008 adds support for using an xml variable in an insert expression to insert XML data into an existing XML structure. For example, suppose an xml variable named @productList contains the following XML:<br /><Products><br />  <Bike>Mountain Bike</Bike><br />  <Bike>Road Bike</Bike><br /></Products><br />You could use the following code to insert a new bike into the product list:<br />DECLARE @newBike xml<br />SET @newBike = '<Bike>Racing Bike</Bike>'<br />SET @productList.modify<br />('insert sql:variable(\"
@newBike\"
) as last into (/Products)[1]')<br />After running this code, the @productList variable would contain the following XML.<br /><Products><br />  <Bike>Mountain Bike</Bike><br />  <Bike>Road Bike</Bike><br />  <Bike>Racing Bike</Bike><br /></Products><br />Conclusion<br />SQL Server 2008 builds on the already comprehensive support for XML that was present in SQL Server 2005, and extends your ability to build powerful database solutions that combine relational data and XML. The improvements to XML schema support, as well as the enhancements to the xml data type provide benefits that application developers will find immensely appealing.<br />For more information:<br />http://www.microsoft.com/sql/<br />Please give us your feedback:<br />Did this paper help you? Tell us on a scale of 1 (poor) to 5 (excellent), how would you rate this paper and why have you given it this rating? For example:<br />Are you giving it a high rating because it has good examples, excellent screenshots, clear writing, or another reason? <br />Are you giving it a low rating because it has poor examples, fuzzy screenshots, unclear writing?<br />This feedback will help us improve the quality of white papers we release. Send feedback.<br />
Sql server 2008 r2 xml wp
Sql server 2008 r2 xml wp
Sql server 2008 r2 xml wp
Sql server 2008 r2 xml wp
Sql server 2008 r2 xml wp
Sql server 2008 r2 xml wp
Sql server 2008 r2 xml wp
Sql server 2008 r2 xml wp
Sql server 2008 r2 xml wp
Sql server 2008 r2 xml wp
Sql server 2008 r2 xml wp
Sql server 2008 r2 xml wp
Sql server 2008 r2 xml wp
Sql server 2008 r2 xml wp

More Related Content

What's hot (19)

PPTX
Database Systems - SQL - DCL Statements (Chapter 3/4)
Vidyasagar Mundroy
 
PDF
Creating Purcahse Orders
EMAINT
 
PPT
Sql presentation 1 by chandan
Linux international training Center
 
PDF
Detail Views
EMAINT
 
PPTX
Detail view in distributed technologies
jamessakila
 
PPT
Excel 2007 Unit N
Raja Waseem Akhtar
 
PPT
Sql basic best-course-in-mumbai
vibrantuser
 
PPT
EHRI Conversion Tool
EHRI
 
PPTX
Data weave
himajareddys
 
DOCX
Dbms practical list
RajSingh734307
 
PPTX
Creating database using sql commands
Belle Wx
 
PDF
Get Started with Excel for PPC in 40 Minutes - Hero Conf London 2017
Frederik Hyldig
 
PDF
Form personalization 395117_r12_updated1212
flower705
 
PPT
Internet Environment
guest8fdbdd
 
PDF
Tips and Tricks
EMAINT
 
PDF
Customizing Forms
EMAINT
 
PDF
Oracle SQL Part 3
Gurpreet singh
 
Database Systems - SQL - DCL Statements (Chapter 3/4)
Vidyasagar Mundroy
 
Creating Purcahse Orders
EMAINT
 
Sql presentation 1 by chandan
Linux international training Center
 
Detail Views
EMAINT
 
Detail view in distributed technologies
jamessakila
 
Excel 2007 Unit N
Raja Waseem Akhtar
 
Sql basic best-course-in-mumbai
vibrantuser
 
EHRI Conversion Tool
EHRI
 
Data weave
himajareddys
 
Dbms practical list
RajSingh734307
 
Creating database using sql commands
Belle Wx
 
Get Started with Excel for PPC in 40 Minutes - Hero Conf London 2017
Frederik Hyldig
 
Form personalization 395117_r12_updated1212
flower705
 
Internet Environment
guest8fdbdd
 
Tips and Tricks
EMAINT
 
Customizing Forms
EMAINT
 
Oracle SQL Part 3
Gurpreet singh
 

Viewers also liked (6)

PDF
Welcome to SSDT
Thomas Clayton
 
PDF
Suporte XML nativo no SQL Server 2014/2016
Rogério Moraes de Carvalho
 
PPT
Sql Summit Clr, Service Broker And Xml
David Truxall
 
PPTX
Managing database project with Visual Studio SSDT and TFS
Harry Zheng
 
PPTX
SSDT unleashed
GomathiNayagam S
 
PPTX
SSDT Workshop @ SQL Bits X (2012-03-29)
Gert Drapers
 
Welcome to SSDT
Thomas Clayton
 
Suporte XML nativo no SQL Server 2014/2016
Rogério Moraes de Carvalho
 
Sql Summit Clr, Service Broker And Xml
David Truxall
 
Managing database project with Visual Studio SSDT and TFS
Harry Zheng
 
SSDT unleashed
GomathiNayagam S
 
SSDT Workshop @ SQL Bits X (2012-03-29)
Gert Drapers
 
Ad

Similar to Sql server 2008 r2 xml wp (20)

PPT
Sql2005 Xml
jason hu 金良胡
 
PPTX
Sql2005 xml
nkaluva
 
PPTX
SQLPASS AD501-M XQuery MRys
Michael Rys
 
PDF
SQL Server - Querying and Managing XML Data
Marek Maśko
 
PPTX
Xml and databases
Raghu nath
 
PPTX
OakTable World 2015 - Using XMLType content with the Oracle In-Memory Column...
Marco Gralike
 
PDF
Session06 handling xml data
kendyhuu
 
PDF
PostgreSQL and XML
Peter Eisentraut
 
PPT
Application development using Microsoft SQL Server 2000
webhostingguy
 
PPTX
Xml part4
NOHA AW
 
DOCX
Xml generation and extraction using XMLDB
pallavi kasibhotla
 
PPTX
OPP2010 (Brussels) - Programming with XML in PL/SQL - Part 1
Marco Gralike
 
PPT
Working With XML in IDS Applications
Keshav Murthy
 
DOC
Xsd
xavier john
 
PDF
UKOUG Tech14 - Using Database In-Memory Column Store with Complex Datatypes
Marco Gralike
 
PPT
Xsd examples
Bình Trọng Án
 
PDF
XML Support: Specifications and Development
Peter Eisentraut
 
DOCX
Introduction to xml schema
Abhishek Kesharwani
 
PPTX
XML Schema
Kumar
 
Sql2005 Xml
jason hu 金良胡
 
Sql2005 xml
nkaluva
 
SQLPASS AD501-M XQuery MRys
Michael Rys
 
SQL Server - Querying and Managing XML Data
Marek Maśko
 
Xml and databases
Raghu nath
 
OakTable World 2015 - Using XMLType content with the Oracle In-Memory Column...
Marco Gralike
 
Session06 handling xml data
kendyhuu
 
PostgreSQL and XML
Peter Eisentraut
 
Application development using Microsoft SQL Server 2000
webhostingguy
 
Xml part4
NOHA AW
 
Xml generation and extraction using XMLDB
pallavi kasibhotla
 
OPP2010 (Brussels) - Programming with XML in PL/SQL - Part 1
Marco Gralike
 
Working With XML in IDS Applications
Keshav Murthy
 
UKOUG Tech14 - Using Database In-Memory Column Store with Complex Datatypes
Marco Gralike
 
Xsd examples
Bình Trọng Án
 
XML Support: Specifications and Development
Peter Eisentraut
 
Introduction to xml schema
Abhishek Kesharwani
 
XML Schema
Kumar
 
Ad

More from Klaudiia Jacome (20)

PDF
Aoutsourcing para capitulo 7
Klaudiia Jacome
 
PDF
Si las cosas van mal
Klaudiia Jacome
 
PPTX
Analysis services
Klaudiia Jacome
 
PPTX
Enterprise security
Klaudiia Jacome
 
PPTX
Performance
Klaudiia Jacome
 
PPTX
Performance
Klaudiia Jacome
 
PPTX
Enterprise security
Klaudiia Jacome
 
PPTX
Data warehouse
Klaudiia Jacome
 
PPTX
Managemen tools
Klaudiia Jacome
 
PPTX
Managemen tolos
Klaudiia Jacome
 
PPTX
Datos espaciales
Klaudiia Jacome
 
PPTX
Data warehouse
Klaudiia Jacome
 
PPTX
Avances analticos
Klaudiia Jacome
 
PPTX
Applicationandmulti instances
Klaudiia Jacome
 
PDF
Sql server2008 r2_mds_datasheet
Klaudiia Jacome
 
DOCX
Microsoft sql server 2008 r2 business intelligence
Klaudiia Jacome
 
DOCX
Introduction to master data services
Klaudiia Jacome
 
DOC
Sql server2008 r2_bi_datasheet_final
Klaudiia Jacome
 
PPTX
Sql server 2008 business intelligence tdm deck
Klaudiia Jacome
 
DOCX
Microsoft sql server 2008 r2 business intelligence
Klaudiia Jacome
 
Aoutsourcing para capitulo 7
Klaudiia Jacome
 
Si las cosas van mal
Klaudiia Jacome
 
Analysis services
Klaudiia Jacome
 
Enterprise security
Klaudiia Jacome
 
Performance
Klaudiia Jacome
 
Performance
Klaudiia Jacome
 
Enterprise security
Klaudiia Jacome
 
Data warehouse
Klaudiia Jacome
 
Managemen tools
Klaudiia Jacome
 
Managemen tolos
Klaudiia Jacome
 
Datos espaciales
Klaudiia Jacome
 
Data warehouse
Klaudiia Jacome
 
Avances analticos
Klaudiia Jacome
 
Applicationandmulti instances
Klaudiia Jacome
 
Sql server2008 r2_mds_datasheet
Klaudiia Jacome
 
Microsoft sql server 2008 r2 business intelligence
Klaudiia Jacome
 
Introduction to master data services
Klaudiia Jacome
 
Sql server2008 r2_bi_datasheet_final
Klaudiia Jacome
 
Sql server 2008 business intelligence tdm deck
Klaudiia Jacome
 
Microsoft sql server 2008 r2 business intelligence
Klaudiia Jacome
 

Recently uploaded (20)

PPTX
Webinar: Introduction to LF Energy EVerest
DanBrown980551
 
PDF
Chris Elwell Woburn, MA - Passionate About IT Innovation
Chris Elwell Woburn, MA
 
PDF
July Patch Tuesday
Ivanti
 
PPTX
From Sci-Fi to Reality: Exploring AI Evolution
Svetlana Meissner
 
PDF
From Code to Challenge: Crafting Skill-Based Games That Engage and Reward
aiyshauae
 
PDF
Blockchain Transactions Explained For Everyone
CIFDAQ
 
PDF
Reverse Engineering of Security Products: Developing an Advanced Microsoft De...
nwbxhhcyjv
 
PDF
Biography of Daniel Podor.pdf
Daniel Podor
 
PDF
"AI Transformation: Directions and Challenges", Pavlo Shaternik
Fwdays
 
PPTX
AUTOMATION AND ROBOTICS IN PHARMA INDUSTRY.pptx
sameeraaabegumm
 
PDF
CIFDAQ Market Insights for July 7th 2025
CIFDAQ
 
PDF
[Newgen] NewgenONE Marvin Brochure 1.pdf
darshakparmar
 
PDF
CIFDAQ Market Wrap for the week of 4th July 2025
CIFDAQ
 
PDF
Building Real-Time Digital Twins with IBM Maximo & ArcGIS Indoors
Safe Software
 
PDF
Transcript: New from BookNet Canada for 2025: BNC BiblioShare - Tech Forum 2025
BookNet Canada
 
PDF
Using FME to Develop Self-Service CAD Applications for a Major UK Police Force
Safe Software
 
PDF
New from BookNet Canada for 2025: BNC BiblioShare - Tech Forum 2025
BookNet Canada
 
PDF
IoT-Powered Industrial Transformation – Smart Manufacturing to Connected Heal...
Rejig Digital
 
PDF
HubSpot Main Hub: A Unified Growth Platform
Jaswinder Singh
 
PDF
How Startups Are Growing Faster with App Developers in Australia.pdf
India App Developer
 
Webinar: Introduction to LF Energy EVerest
DanBrown980551
 
Chris Elwell Woburn, MA - Passionate About IT Innovation
Chris Elwell Woburn, MA
 
July Patch Tuesday
Ivanti
 
From Sci-Fi to Reality: Exploring AI Evolution
Svetlana Meissner
 
From Code to Challenge: Crafting Skill-Based Games That Engage and Reward
aiyshauae
 
Blockchain Transactions Explained For Everyone
CIFDAQ
 
Reverse Engineering of Security Products: Developing an Advanced Microsoft De...
nwbxhhcyjv
 
Biography of Daniel Podor.pdf
Daniel Podor
 
"AI Transformation: Directions and Challenges", Pavlo Shaternik
Fwdays
 
AUTOMATION AND ROBOTICS IN PHARMA INDUSTRY.pptx
sameeraaabegumm
 
CIFDAQ Market Insights for July 7th 2025
CIFDAQ
 
[Newgen] NewgenONE Marvin Brochure 1.pdf
darshakparmar
 
CIFDAQ Market Wrap for the week of 4th July 2025
CIFDAQ
 
Building Real-Time Digital Twins with IBM Maximo & ArcGIS Indoors
Safe Software
 
Transcript: New from BookNet Canada for 2025: BNC BiblioShare - Tech Forum 2025
BookNet Canada
 
Using FME to Develop Self-Service CAD Applications for a Major UK Police Force
Safe Software
 
New from BookNet Canada for 2025: BNC BiblioShare - Tech Forum 2025
BookNet Canada
 
IoT-Powered Industrial Transformation – Smart Manufacturing to Connected Heal...
Rejig Digital
 
HubSpot Main Hub: A Unified Growth Platform
Jaswinder Singh
 
How Startups Are Growing Faster with App Developers in Australia.pdf
India App Developer
 

Sql server 2008 r2 xml wp

  • 1. What’s New for XML in SQL Server 2008?<br />White Paper<br />Published: August 2008<br />Summary: Microsoft® SQL Server™ 2008 builds on the extensive support for XML by extending support for XML schema validation and XQuery, and by enhancing the xml data type.<br />.<br />Contents<br /> TOC \o \" 1-2\" Introduction PAGEREF _Toc205573720 \h 1<br />The Evolution of SQL Server XML Capabilities PAGEREF _Toc205573721 \h 1<br />XML Functionality in SQL Server 2000 PAGEREF _Toc205573722 \h 1<br />XML Functionality in SQL Server 2005 PAGEREF _Toc205573723 \h 2<br />XML Functionality in SQL Server 2008 PAGEREF _Toc205573724 \h 5<br />XML Schema Validation Enhancements PAGEREF _Toc205573725 \h 5<br />Lax Validation Support PAGEREF _Toc205573726 \h 6<br />Full xs:dateTime Support PAGEREF _Toc205573727 \h 7<br />Union and List Types PAGEREF _Toc205573728 \h 8<br />XQuery Enhancements PAGEREF _Toc205573729 \h 10<br />XML DML Enhancements PAGEREF _Toc205573730 \h 11<br />Conclusion PAGEREF _Toc205573731 \h 12<br />Introduction<br />Microsoft introduced XML-related capabilities in Microsoft SQL Server 2000 with the FOR XML and OPENXML Transact-SQL keywords, which enabled developers to write Transact-SQL code to retrieve a query result as a stream of XML, and to shred an XML document into a rowset. These XML capabilities were extended significantly in SQL Server 2005 with the introduction of a native xml data type that supports XSD schema validation, XQuery-based operations, and XML indexing. SQL Server 2008 builds on the XML capabilities of previous releases and provides enhancements to meet the challenges that customers have faced when storing and manipulating XML data in the database.<br />The Evolution of SQL Server XML Capabilities<br />The XML features of SQL Server have evolved with each version of SQL Server since SQL Server 2000. Before we examine the enhancements in SQL Server 2008, it might be useful to chart the evolution of XML functionality through the previous versions.<br />XML Functionality in SQL Server 2000<br />In SQL Server 2000, Microsoft introduced the FOR XML and OPENXML Transact-SQL keywords. FOR XML is an extension to the SELECT statement that returns the query results as a stream of XML as shown in the following example.<br />SELECT ProductID, ProductName<br />FROM Products Product<br />FOR XML AUTO<br />This query returns an XML fragment like the following example.<br /><Product ProductID=\" 1\" ProductName=\" Widget\" /><br /><Product ProductID=\" 2\" ProductName=\" Sprocket\" /><br />The OPENXML function performs the opposite function to the FOR XML clause by creating a rowset from an XML document, as shown in the following example.<br />DECLARE @doc nvarchar(1000)<br />SET @doc = '<Order OrderID = \" 1011\" ><br /><Item ProductID=\" 1\" Quantity=\" 2\" /><br /><Item ProductID=\" 2\" Quantity=\" 1\" /><br /></Order>'<br />DECLARE @xmlDoc integer<br />EXEC sp_xml_preparedocument @xmlDoc OUTPUT, @doc<br />SELECT * FROM<br />OPENXML (@xmlDoc, 'Order/Item', 1)<br />WITH<br />(OrderID integer '../@OrderID',<br /> ProductID integer,<br /> Quantity integer)<br />EXEC sp_xml_removedocument @xmlDoc<br />Note the use of the sp_xml_preparedocument and sp_xml_removedocument stored procedures to create an in-memory representation of the node tree for the XML document. This Transact-SQL code returns the following rowset.<br />OrderIDProductIDQuantity101112101121<br />XML Functionality in SQL Server 2005<br />In SQL Server 2005, the FOR XML feature was enhanced with new options for root elements and element names, the ability to nest FOR XML calls so you can build complex hierarchies, and a new PATH mode that enables you to define the structure of the XML to be retrieved by using XPath syntax, as shown in the following example.<br />SELECT ProductID AS '@ProductID',<br />ProductName AS 'ProductName'<br />FROM Products<br />FOR XML PATH ('Product'), ROOT ('Products')<br />This query returns the following XML.<br /><Products><br /><Product ProductID=\" 1\" ><br /><ProductName>Widget</ProductName><br /></Product><br /><Product ProductID=\" 2\" ><br /><ProductName>Sprocket</ProductName><br /></Product><br /></Products><br />In addition to enhancing the existing XML features that had been introduced in SQL Server 2000, SQL Server 2005 added a new, native xml data type that enables you to create variables and columns for XML data, as shown in the following example.<br />CREATE TABLE SalesOrders<br />(OrderID integer PRIMARY KEY,<br /> OrderDate datetime,<br /> CustomerID integer,<br /> OrderNotes xml)<br />You can use the xml data type to store markup documents or semi-structured data in the database. Columns and variables can be used for untyped XML or typed XML, the latter of which is validated against an XML Schema Definition (XSD) schema. To define the schemas for data validation, developers can use the CREATE XML SCHEMA COLLECTION statement, as shown in the following example.<br />CREATE XML SCHEMA COLLECTION ProductSchema AS<br />'<?xml version=\" 1.0\" encoding=\" UTF-16\" ?><br /><xs:schema xmlns:xs=\" http://www.w3.org/2001/XMLSchema\" ><br /> <!-- schema declarations go here --><br /></xs:schema>'<br />After creating a schema collection, you can associate an xml variable or column with the schema declarations it contains by referencing the schema collection as shown in the following example.<br />CREATE TABLE SalesOrders<br />(OrderID integer PRIMARY KEY,<br /> OrderDate datetime,<br /> CustomerID integer,<br /> OrderNotes xml(ProductSchema))<br />Typed XML is validated against the declarations in the associated schema collection when values are inserted or updated, which makes it possible to enforce business rules about the structure of XML data for compliance or compatibility reasons.<br />The xml data type also provides a number of methods, which you can use to query and manipulate the XML data in an instance. For example, you can use the query method to query the XML in an instance of the xml data type, as shown in the following example.<br />declare @x xml<br />set @x=<br />'<Invoices><br /><Invoice><br /><Customer>Kim Abercrombie</Customer><br /><Items><br /><Item ProductID=\" 2\" Price=\" 1.99\" Quantity=\" 1\" /><br /><Item ProductID=\" 3\" Price=\" 2.99\" Quantity=\" 2\" /><br /><Item ProductID=\" 5\" Price=\" 1.99\" Quantity=\" 1\" /><br /></Items><br /></Invoice><br /><Invoice><br /><Customer>Margaret Smith</Customer><br /><Items><br /><Item ProductID=\" 2\" Price=\" 1.99\" Quantity=\" 1\" /><br /></Items><br /></Invoice><br /></Invoices>'<br />SELECT @x.query(<br />'<CustomerList><br />{<br />for $invoice in /Invoices/Invoice<br />return $invoice/Customer<br />}<br /></CustomerList>')<br />The query in this example uses an XQuery expression that finds each Invoice element in the document and returns an XML document that contains the Customer element from each Invoice element, as shown in the following example.<br /><CustomerList><br /> <Customer>Kim Abercrombie</Customer><br /> <Customer>Margaret Smith</Customer><br /></CustomerList><br />Another significant XML-related feature that was introduced in SQL Server 2005 is support for XML indexes. You can create primary and secondary XML indexes for columns of type xml to enhance XML query performance. A primary XML index is a shredded representation of all of the nodes in an XML instance, which the query processor can use to quickly find nodes within an XML value. After you have created a primary XML index, you can create secondary XML indexes to improve the performance of specific types of query. The following example creates a primary XML index, and a secondary XML index of type PATH, which can improve performance of queries that use XPath expressions to identify nodes in an XML instance.<br />CREATE PRIMARY XML INDEX idx_xml_Notes<br />ON SalesOrders (Notes)<br />GO<br />CREATE XML INDEX idx_xml_Path_Notes<br />ON SalesOrders (Notes)<br />USING XML INDEX idx_xml_Notes<br />FOR PATH<br />GO<br />XML Functionality in SQL Server 2008<br />The XML functionality that was introduced in SQL Server 2000 and SQL Server 2005 has been enhanced in SQL Server 2008. Key XML-related enhancements in SQL Server 2008 include:<br />Improved schema validation capabilities<br />Enhancements to XQuery support<br />Enhanced functionality for performing XML data manipulation language (DML) insertions<br />The rest of this whitepaper examines these enhancements and demonstrates how you can use them to implement better XML solutions in SQL Server 2008.<br />XML Schema Validation Enhancements<br />You can validate XML data by enforcing compliance with one or several XSD schemas. A schema defines the permissible XML elements and attributes for a particular XML data structure, and is often used to ensure that XML documents contain all of the required data elements in the correct structure.<br />SQL Server 2005 introduced validation of XML data through the use of XML schema collections. The general approach is to a create schema collection that contains the schema rules for your XML data by using the CREATE XML SCHEMA COLLECTION statement, and then to reference the schema collection name when you define an xml column or variable that must conform to the schema rules in the schema collection. SQL Server then validates any data that is inserted or updated in the column or variable against the schema declarations in the schema collection.<br />XML Schema support in SQL Server 2005 implemented a broad subset of the full XML Schema specification, and covered the most common XML validation scenarios. SQL Server 2008 extends that support to include the following additional schema validation requirements that have been identified by customers:<br />Support for lax validation<br />Full support for dateTime, time and date validation, including preservation of time zone information<br />Improved Support for union and list types<br />Lax Validation Support<br />XML Schemas support wildcard sections in XML documents through the any, anyAttribute, and anyType declarations. For example, consider the following XML schema declaration.<br /><xs:complexType name=\" Order\" mixed=\" true\" ><br /> <xs:sequence><br /> <xs:element name=\" CustomerName\" /><br /> <xs:element name=\" OrderTotal\" /><br /> <xs:any namespace=\" ##other\" processContents=\" skip\" <br />minOccurs=\" 0\" maxOccurs=\" unbounded\" /><br /> </xs:sequence><br /></xs:complexType><br />This schema declaration defines an XML element named Order, which must contain sub-elements named CustomerName and OrderTotal. Additionally, the element can contain an unlimited number of other elements that belong to a different namespace than the one to which the Order type belongs. The following XML shows an XML document that contains an instance of an Order element as defined by this schema declaration. Note that the order also contains a shp:Delivery element, which is not explicitly defined in the schema.<br /><Invoice xmlns=\" http://adventure-works.com/order\" <br />xmlns:shp=\" http://adventure-works.com/shipping\" ><br /> <Order><br /> <CustomerName>Graeme Malcolm</CustomerName><br /> <OrderTotal>299.99</OrderTotal><br /> <shp:Delivery>Express</shp:Delivery><br /> </Order><br /></Invoice><br />Validation for wildcard sections depends on the processContents attribute for the wildcard section in the schema definition. In SQL Server 2005, schemas can use processContents values of skip and strict for any and anyAttribute declarations. In the previous example, the processContents attribute for the wildcard element has been set to skip, so no attempt to validate the contents of that element is made. Even if the schema collection includes a declaration for the shp:Delivery element (for example, defining a list of valid delivery methods), the element is not validated unless the declaration for the wildcard in the Order element has its processContents attribute set to strict.<br />SQL Server 2008 adds support for a third validation option. By setting the processContents attribute for a wildcard section to lax, you can enforce validation for any elements that have schema declarations associated with them, but ignore any elements that are not defined in the schema. To continue the previous example, if you set the processContents attribute for the wildcard element declaration in the schema to lax and add a declaration for the shp:Delivery element, shp:Delivery element in the XML document is validated. However, if instead of the shp:Delivery element, the document includes an element that is not defined in the schema, the element is ignored.<br />In addition, the XML Schema specification defines that the anyType declaration has lax processing of its content model. SQL Server 2005 does not support lax processing, so the content is validated strictly instead. SQL Server 2008 does support lax processing of the anyType contents, and so the content is validated correctly.<br />Full xs:dateTime Support<br />You can use the dateTime data type in an XML schema to define date and time data. Date and time data is expressed in the format 2007-08-01T09:30:00:000Z, which represents the 1st of August 2007 at 9:30 in the morning in the coordinated universal time zone (UTC), which is indicated by the Z. Other time zones are represented by the time difference from UTC, so for example you can represent 6:00 in the morning on December 25th 2007 in Pacific Standard Time (which is 8 hours behind UTC) with the value 2007-12-25T06:00:00:000-8:00.<br />The XML Schema specification defines the time zone component of the dateTime, date and time data types as optional. However, in SQL Server 2005 you must provide a time zone for dateTime, time and date data. Additionally, SQL Server 2005 does not preserve the time zone information for your data for dateTime or time, but normalizes it to UTC (so for example, if your XML contains the value 2007-12-25T06:00:00:000-8:00, SQL Server 2005 normalizes this as 2007-12-25T14:00:00:000Z.) In SQL Server 2008, these limitations have been removed, so you can omit the time zone information when you store dateTime, date or time data, and any time zone information that you do provide is preserved.<br />Union and List Types<br />You can use XML schemas to define data types for your XML data that allow a limited set of values to be assigned to multi-value elements and attributes. For example, you might define a sizeListType type that restricts the list of possible values that can be assigned to an AvaliableSizes element in the product definition to S, M, and L. SQL Server 2005 supports XML schemas that contain these simple type definitions and restrictions. For example, you can use a list type to define the valid sizes for a product as shown in the following example.<br /><xs:simpleType name=\" sizeListType\" ><br /> <xs:list><br /> <xs:simpleType><br /> <xs:restriction base=\" xs:string\" ><br /> <xs:enumeration value=\" S\" /><br /> <xs:enumeration value=\" M\" /><br /> <xs:enumeration value=\" L\" /><br /> </xs:restriction><br /> </xs:simpleType><br /> </xs:list><br /></xs:simpleType><br />This schema declaration enables you to create an element that lists all of the sizes in which a product can be purchased as a list of values separated by white space, as shown in the following example:<br /><AvailableSizes>S M L</AvailableSizes><br />However, what if you want to support two different ways to express the size of a product? For example, suppose a cycling equipment retailer sells cycling clothes in small, medium, and large sizes, but also sells bicycles in numerical sizes relating to the frame size (such as 18, 20, 22, and 24)? To enable you to accomplish this, SQL Server 2008 adds support for union types that contain list types, which you can use to merge multiple list type definitions and restrictions into a single type. For example, the following Transact-SQL code creates an XML schema collection that defines a productSizeType type in which valid values include a list of numeric sizes (18, 20, 22, and 24) and a list of named sizes (S, M, and L).<br />CREATE XML SCHEMA COLLECTION CatalogSizeSchema AS<br />N'<?xml version=\" 1.0\" encoding=\" UTF-16\" ?><br /><xs:schema xmlns:xs=\" http://www.w3.org/2001/XMLSchema\" ><br /><xs:simpleType name=\" productSizeType\" ><br /><xs:union><br /><xs:simpleType><br /> <xs:list><br /><xs:simpleType><br /> <xs:restriction base=\" xs:integer\" ><br /><xs:enumeration value=\" 18\" /><br /><xs:enumeration value=\" 20\" /><br /><xs:enumeration value=\" 22\" /><br /><xs:enumeration value=\" 24\" /><br /> </xs:restriction><br /></xs:simpleType><br /> </xs:list><br /></xs:simpleType><br /><xs:simpleType><br /> <xs:list><br /><xs:simpleType><br /> <xs:restriction base=\" xs:string\" ><br /><xs:enumeration value=\" S\" /><br /><xs:enumeration value=\" M\" /><br /><xs:enumeration value=\" L\" /><br /> </xs:restriction><br /></xs:simpleType><br /> </xs:list><br /></xs:simpleType><br /></xs:union><br /></xs:simpleType><br /></xs:schema>'<br />With this declaration in the schema, any elements based on the productSizeType can contain either kind of list; so both of the product elements in the following example would be valid instances of the productSizeType data type.<br /><Catalog><br /> <Product><br /> <ProductName>Road Bike</ProductName><br /> <AvailableSizes>22 24</AvailableSizes><br /> </Product><br /> <Product><br /> <ProductName>Cycling Jersey</ProductName><br /> <AvailableSizes>S M L</AvailableSizes><br /> </Product><br /></Catalog><br />Similarly, SQL Server 2008 supports schema declarations for list types that contain union types.<br />XQuery Enhancements<br />SQL Server 2005 introduced the xml data type, which provides a number of methods that you can use to perform operations on the XML data stored in a column or variable. Most of the operations you can perform use XQuery syntax to navigate and manipulate the XML data. The XQuery syntax supported by SQL Server 2005 includes the for, where, order by, and return clauses of the so called FLWOR expression, which you can use to iterate over the nodes in an XML document and return values.<br />SQL Server 2008 adds support for the let clause, which is used to assign values to variables in an XQuery expression such as the following example:<br />declare @x xml<br />set @x=<br />'<Invoices><br /><Invoice><br /><Customer>Kim Abercrombie</Customer><br /><Items><br /><Item ProductID=\" 2\" Price=\" 1.99\" Quantity=\" 1\" /><br /><Item ProductID=\" 3\" Price=\" 2.99\" Quantity=\" 2\" /><br /><Item ProductID=\" 5\" Price=\" 1.99\" Quantity=\" 1\" /><br /></Items><br /></Invoice><br /><Invoice><br /><Customer>Margaret Smith</Customer><br /><Items><br /><Item ProductID=\" 2\" Price=\" 1.99\" Quantity=\" 1\" /><br /></Items><br /></Invoice><br /></Invoices>'<br />SELECT @x.query(<br />'<Orders><br />{<br />for $invoice in /Invoices/Invoice<br />let $count :=count($invoice/Items/Item)<br />order by $count<br />return<br /><Order><br />{$invoice/Customer}<br /><ItemCount>{$count}</ItemCount><br /></Order><br />}<br /></Orders>')<br />This example returns the following XML.<br /><Orders><br /><Order><br /><Customer>Margaret Smith</Customer><br /><ItemCount>1</ItemCount><br /></Order><br /><Order><br /><Customer>Kim Abercrombie</Customer><br /><ItemCount>3</ItemCount><br /></Order><br /></Orders><br />Note that SQL Server 2008 does not allow the assignment of constructed elements.<br />XML DML Enhancements<br />As well as being able to use XQuery expressions to perform operations on XML data, the xml data type supports the XML DML expressions insert, replace value of, and delete through its modify method. You can use these XML DML expressions to manipulate the XML data in an xml column or variable.<br />SQL Server 2008 adds support for using an xml variable in an insert expression to insert XML data into an existing XML structure. For example, suppose an xml variable named @productList contains the following XML:<br /><Products><br /> <Bike>Mountain Bike</Bike><br /> <Bike>Road Bike</Bike><br /></Products><br />You could use the following code to insert a new bike into the product list:<br />DECLARE @newBike xml<br />SET @newBike = '<Bike>Racing Bike</Bike>'<br />SET @productList.modify<br />('insert sql:variable(\" @newBike\" ) as last into (/Products)[1]')<br />After running this code, the @productList variable would contain the following XML.<br /><Products><br /> <Bike>Mountain Bike</Bike><br /> <Bike>Road Bike</Bike><br /> <Bike>Racing Bike</Bike><br /></Products><br />Conclusion<br />SQL Server 2008 builds on the already comprehensive support for XML that was present in SQL Server 2005, and extends your ability to build powerful database solutions that combine relational data and XML. The improvements to XML schema support, as well as the enhancements to the xml data type provide benefits that application developers will find immensely appealing.<br />For more information:<br />http://www.microsoft.com/sql/<br />Please give us your feedback:<br />Did this paper help you? Tell us on a scale of 1 (poor) to 5 (excellent), how would you rate this paper and why have you given it this rating? For example:<br />Are you giving it a high rating because it has good examples, excellent screenshots, clear writing, or another reason? <br />Are you giving it a low rating because it has poor examples, fuzzy screenshots, unclear writing?<br />This feedback will help us improve the quality of white papers we release. Send feedback.<br />