XQuery y XPath for SQL Server 2012 itpros dc_chapter6
-
Upload
julian-castiblanco-p -
Category
Technology
-
view
605 -
download
5
description
Transcript of XQuery y XPath for SQL Server 2012 itpros dc_chapter6
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