Transcript
Page 1: XQuery y XPath for SQL Server 2012 itpros dc_chapter6

Julián Castiblanco P.http://julycastiblanco.blogspot.com/

[email protected]

MCT-MCSA-MCITP-MCTS SQL Server 2008/2005

Líder ITPros-DC

Querying Microsoft SQL Server 2012Exam 70-461Capítulo 6 – XML

Page 2: XQuery y XPath for SQL Server 2012 itpros dc_chapter6

• Ingeniero de Diseño & Automatización Electrónica• Especialista en Gerencia y Tecnologías de Información• MCT-MCSA-MCITP-MCTS en SQL SERVER• Synergy TPC SAS como consultor especializado en

bases de datos SQL Server

Julián

Castiblanco

Andrés

Useche

• Ingeniero de Sistemas• Especialista en Teleinformática• MCP SQL SERVER 2012• Terpel como ingeniero de infraestructura IT - DBA

Page 3: XQuery y XPath for SQL Server 2012 itpros dc_chapter6

Material de trabajo

Windows Server 2012 trialhttp://www.microsoft.com/en-us/download/details.aspx?id=11093

SQL Server 2012 with SP1 trialhttp://www.microsoft.com/en-us/download/details.aspx?id=29066

AdventureWorks for SQL Server 2012http://msftdbprodsamples.codeplex.com/releases/view/55330

Training kit SQL Server Querying Microsoft SQL Server 2012 – exam 70-461http://www.amazon.com/Training-Kit-Exam-70-461-Microsoft/dp/0735666059/ref=sr_1_1?ie=UTF8&qid=1359206206&sr=8-1&keywords=querying+microsoft+sql+server+2012+training+kit+exam+70-461

Page 4: XQuery y XPath for SQL Server 2012 itpros dc_chapter6

• Recuperación de XML mediante FOR XML

• Fragmentación de XML mediante OPENXML

• Introducción a XQuery

Agenda

Page 5: XQuery y XPath for SQL Server 2012 itpros dc_chapter6

• Devuelve XML en lugar de filas y columnas

• Se puede configurar para que devuelva atributos, elementos y esquema

• Beneficia a las aplicaciones cliente que funcionan con XML

Cláusula FOR XML

Page 6: XQuery y XPath for SQL Server 2012 itpros dc_chapter6

FOR XML RAW

SELECT b.Name Territorio, C.City,COUNT(*) AS numordersFROM sales.SalesOrderHeader AS AINNER JOIN SALES.SalesTerritory AS BON A.TerritoryID=b.TerritoryIDINNER JOIN [Person].[Address] AS CON A.ShipToAddressID=C.AddressIDINNER JOIN [Person].[StateProvince] AS DON C.StateProvinceID=D.StateProvinceIDWHERE b.Name='France'GROUP BY b.Name, C.CityFOR XML RAW

Page 7: XQuery y XPath for SQL Server 2012 itpros dc_chapter6

FOR XML AUTO

SELECT b.Name Territorio, C.City,COUNT(*) AS numordersFROM sales.SalesOrderHeader AS AINNER JOIN SALES.SalesTerritory AS BON A.TerritoryID=b.TerritoryIDINNER JOIN [Person].[Address] AS CON A.ShipToAddressID=C.AddressIDINNER JOIN [Person].[StateProvince] AS DON C.StateProvinceID=D.StateProvinceIDWHERE b.Name='France'GROUP BY b.Name, C.CityFOR XML AUTO

Page 8: XQuery y XPath for SQL Server 2012 itpros dc_chapter6

FOR XML EXPLICIT

SELECT top 10 1 AS Tag,NULL AS Parent,SalesOrderID AS[Invoice!1!InvoiceNo!Element],OrderDate AS [Invoice!1!Date!Element]FROMSales.SalesOrderheaderFOR XML EXPLICIT

Page 9: XQuery y XPath for SQL Server 2012 itpros dc_chapter6

FOR XML PATH

------------------------------------FOR XML PATH----------------------------------

SELECT vC.BusinessEntityID"@customerID",sc.AccountNumber "@accountNumber",FirstName "Customer/FirstName",LastName "Customer/Lastname"

FROMSALES.vIndividualCustomer asvC INNER JOIN Sales.Customer as scON vC.BusinessEntityID=sc.PersonIDFOR XML PATH

Page 10: XQuery y XPath for SQL Server 2012 itpros dc_chapter6

FUNCIONES ADICIONALES

ELEMENT Cambia atributos por Elementos

ROOTColoca un elemento Raiz

TYPEInforma al motor que la información generada es de tipo XML

ABSENT|XSINIL Decidir si se mostraran valores

en nulo

Page 11: XQuery y XPath for SQL Server 2012 itpros dc_chapter6

Demostración

Page 12: XQuery y XPath for SQL Server 2012 itpros dc_chapter6

• Recuperación de XML mediante FOR XML

• Fragmentación de XML mediante OPENXML

• Introducción a XQuery

Agenda

Page 13: XQuery y XPath for SQL Server 2012 itpros dc_chapter6

• OpenXML le permite consultar información de tipo XML y guardarlo en filas y columnas.

• Openxml es un proveedor de filas así que puede utilizarse el select o el selectinto en la sentencia

Fragmentación de XML mediante OPENXML

Page 14: XQuery y XPath for SQL Server 2012 itpros dc_chapter6

Fragmentación de XML mediante OPENXML

Document ObjectModel (DOM)MSXML parser (Msxmlsql.dll)

Xml Document

Sp_xml_preparedocument

OPENXML

Dinamic rowsetrepresentation

Representación dinámica del grupo de datos

Sp_xml_removedocument

Liberación de memoria

flags byte

Page 15: XQuery y XPath for SQL Server 2012 itpros dc_chapter6

Fragmentación de XML mediante OPENXML

DECLARE @xmlDOC xml set @xmlDOC ='<hojadevida><datosbasicosnombre="Julián Castiblanco P"edad="31"correo="[email protected]"/><estudios><estudio><institucion>Colegio Mayor de San Bartolomé</institucion><titulo>Bachiller Académico</titulo><fechaterminacion>1999</fechaterminacion></estudio><estudio><institucion>Universidad de la Salle</institucion><titulo>Ingeniero de Diseño Automatización electronica</titulo><fechaterminacion>2005</fechaterminacion></estudio><estudio><institucion>Universidad Externado de Colombia</institucion><titulo>Especialista en Gerencia y Tecnologías de Información</titulo><fechaterminacion>2011</fechaterminacion></estudio></estudios></hojadevida>'

ELEMENTOS

ATRIBUTOS

TEXTOS

Page 16: XQuery y XPath for SQL Server 2012 itpros dc_chapter6

Fragmentación de XML mediante OPENXML

declare @doc_handle intEXECUTE sp_xml_preparedocument@doc_handle OUTPUT, @xmlDOCSELECT @doc_handle

• El XML es cargado en memoria, dado que varios podrían estar en memoria la variable @doc_handlemaneja el identificado con que este documento puede ser consultado

Page 17: XQuery y XPath for SQL Server 2012 itpros dc_chapter6

Fragmentación de XML mediante OPENXML

• Con la sentencia OPENXML Recorro el xml cargado en memoria y a través de la sentencia WITH los elemento hijos que quiero mapear como columnas

SELECTinstitucion,titulo,fechaTerminacionFROM OPENXML(@doc_handle,'/hojadevida/estudios/estudio',2)WITH(Institucion varchar(90) 'institucion',titulo varchar(90) 'titulo',fechaTerminacion int 'fechaterminacion')

http://technet.microsoft.com/en-us/library/ms187897.aspx

Page 18: XQuery y XPath for SQL Server 2012 itpros dc_chapter6

Demostración

Page 19: XQuery y XPath for SQL Server 2012 itpros dc_chapter6

• Recuperación de XML mediante FOR XML

• Fragmentación de XML mediante OPENXML

• Introducción a XQuery

Agenda

Page 20: XQuery y XPath for SQL Server 2012 itpros dc_chapter6

Introducción a XQuery

Page 21: XQuery y XPath for SQL Server 2012 itpros dc_chapter6

Introducción a XQuery

RootInventarioCarrefo

ur

ElementNodeProductosdeaseo

ElementNodeProducto

Element Nombre

Text Node

Atribute node

Element Tamaño

Text Node

ElementPrecioDetal

TextNode

Page 22: XQuery y XPath for SQL Server 2012 itpros dc_chapter6

<InventarioCarrefour xmlns:p="http://www.inventario.com"><ProductosDeAseo>

<Producto><nombre>Jabón FAB</nombre><Tamano>Bolsa por 5 libras</Tamano><PrecioDetal>7890</PrecioDetal><UnidadesDisponibles>230</UnidadesDisponibles>

</Producto><Producto>

<nombre>Shampoo Pantene</nombre><Tamano>1000ml</Tamano><PrecioDetal>13000</PrecioDetal><UnidadesDisponibles>34</UnidadesDisponibles>

</Producto><Producto>

<nombre>Cepillo de Piso</nombre><Tamano>No aplica</Tamano><PrecioDetal>980</PrecioDetal><UnidadesDisponibles>1200</UnidadesDisponibles>

</Producto></ProductosDeAseo><encargado nombre="William Barrera" depto="AdministracionRecursos" />

</InventarioCarrefour>

Introducción a XQuery

Parent Node

Child Nodes

Text Node

Namespace

Root

Page 23: XQuery y XPath for SQL Server 2012 itpros dc_chapter6

Introducción a XQuery

declarativo

W3C estándar

Usa XpathCase

Sensitive

FLWOR

http://www.w3schools.com/xpath/xpath_intro.asp

Page 24: XQuery y XPath for SQL Server 2012 itpros dc_chapter6

Introducción a XQuery

OUTPUT• Query: xml• Exists : bit• Value: valor especifico• Nodes: salida tipo tabla• Modify: manipular el xml

INPUT

• Doc() documento xml

• Collection() varios xmls

Esquema XML • Basado en esquema ó no tipado.

Page 25: XQuery y XPath for SQL Server 2012 itpros dc_chapter6

Introducción a XQuery

Common Functions• Position()• Count()• Round()• Contains()• Substring()

Xpath Abreviaciones

• “default”

• @

• // , /

• *

Page 26: XQuery y XPath for SQL Server 2012 itpros dc_chapter6

Introducción a XQuery

OUTPUT• Query: xml• Exists : bit• Value: valor especifico• Nodes: salida tipo tabla• Modify: manipular el xml

INPUT

• Doc() documento xml

• Collection() varios xmls

Esquema XML • Basado en esquema o no tipado.

Page 27: XQuery y XPath for SQL Server 2012 itpros dc_chapter6

Modificación de XML con XQuery

insert

delete

Replace value of

Page 28: XQuery y XPath for SQL Server 2012 itpros dc_chapter6

Demostración

Page 29: XQuery y XPath for SQL Server 2012 itpros dc_chapter6

Introducción a Xquery-FLWOR

FLWOR

• For

• Let

• Where

• Order by

• Return

Permite especificar en que nodo del xmlquiero iniciar mi consulta

Page 30: XQuery y XPath for SQL Server 2012 itpros dc_chapter6

Introducción a Xquery-FLWOR

FLWOR

• For

• Let

• Where

• Order by

• Return

Se utiliza para asignar valor a una variable, combinado con funciones, puedo devolver una función que entre el número de nodos de un tipo dentro del xml.

Page 31: XQuery y XPath for SQL Server 2012 itpros dc_chapter6

Introducción a Xquery-FLWOR

FLWOR

• For

• Let

• Where

• Order by

• Return

Al igual que en el transact SQL convencional, esta función me permite filtrar la información que debo devolver.

Page 32: XQuery y XPath for SQL Server 2012 itpros dc_chapter6

Introducción a Xquery-FLWOR

FLWOR

• For

• Let

• Where

• Order by

• Return

Permite definir un ordenamiento diferente en el xmlconsultado. Por ejemplo que reorganice los nodos de salida, basado en el valor de un atributo.

Page 33: XQuery y XPath for SQL Server 2012 itpros dc_chapter6

Introducción a Xquery-FLWOR

FLWOR

• For

• Let

• Where

• Order by

• Return

Es el equivalente al SELECT en transact sqly define la información que va a ser retornada por la consulta.

Page 34: XQuery y XPath for SQL Server 2012 itpros dc_chapter6

Demostración


Top Related