xquery y xpath for sql server 2012 itpros dc_chapter6
DESCRIPTION
en esta presentación encontrará todo lo que necesita saber sobre XML en el motor de base de datos SQL Server 2012,2008,2005. Este material fue diseñado para adquirir los conocimientos y presentar el examen 70-461 Querying SQL Server 2012TRANSCRIPT
Julián Castiblanco P.http://julycastiblanco.blogspot.com/
MCT-MCSA-MCITP-MCTS SQL Server 2008/2005
Líder ITPros-DC
Querying Microsoft SQL Server 2012Exam 70-461Capítulo 6 – XML
• 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
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
• Recuperación de XML mediante FOR XML
• Fragmentación de XML mediante OPENXML
• Introducción a XQuery
Agenda
• 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
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
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
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
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
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
Demostración
• Recuperación de XML mediante FOR XML
• Fragmentación de XML mediante OPENXML
• Introducción a XQuery
Agenda
• 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
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
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
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
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
Demostración
• Recuperación de XML mediante FOR XML
• Fragmentación de XML mediante OPENXML
• Introducción a XQuery
Agenda
Introducción a XQuery
Introducción a XQuery
RootInventarioCarrefo
ur
ElementNodeProductosdeaseo
ElementNodeProducto
Element Nombre
Text Node
Atribute node
Element Tamaño
Text Node
ElementPrecioDetal
TextNode
<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
Introducción a XQuery
declarativo
W3C estándar
Usa XpathCase
Sensitive
FLWOR
http://www.w3schools.com/xpath/xpath_intro.asp
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.
Introducción a XQuery
Common Functions• Position()• Count()• Round()• Contains()• Substring()
Xpath Abreviaciones
• “default”
• @
• // , /
• *
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.
Modificación de XML con XQuery
insert
delete
Replace value of
Demostración
Introducción a Xquery-FLWOR
FLWOR
• For
• Let
• Where
• Order by
• Return
Permite especificar en que nodo del xmlquiero iniciar mi consulta
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.
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.
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.
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.
Demostración