Você está na página 1de 24

Unidad 4 Manejo de datos XML en SQL SERVER

Curso: Base de Datos Avanzado II Equipo de Profesores del Curso

Base de Datos

Agenda
Introduccin Almacenamiento de datos XML Recuperando datos de tipo XML

SQL Server 2008

Base de Datos
Base de Datos Logro Al trmino de la unidad, el alumno, haciendo uso de las estructuras de programacin TRANSACT-SQL desarrolladas en clase, define e implementa objetos de base de datos que permite realizar operaciones de consulta y actualizacin de datos.

SQL Server 2008

Base de Datos XML (Extensible Markup Language)


.

SQL Server 2008

Base de Datos XML


Bien, por qu es conveniente usar XML? Porque los negocios de hoy en da dependen de la informacin y los datos pueden provenir de varios orgenes de informacin distintos: bases de datos, pginas Web, archivos de hojas de clculo y correo electrnico, por mencionar slo algunos. XML le permite trabajar con ms datos de ms orgenes y hacer ms cosas con esos datos. El lenguaje XML es tan popular porque resulta muy til.

SQL Server 2008

Base de Datos XML


Si los documentos se almacenan en un servidor de base de datos como XML, potentes aplicaciones pueden ser desarrolladas, tales como: Las aplicaciones que recuperan los documentos en base a su contenido. Las aplicaciones que consulta por el contenido parcial, como la bsqueda de la seccin cuyo ttulo contiene la palabra "fondo".

SQL Server 2008

Base de Datos XML

SQL Server 2008

Base de Datos XML

SQL Server 2008

Ms partes de un archivo XML. Declaraciones Elemento raz Atributo Etiquetas y datos

Base de Datos XML sin tipo


USE NEGOCIOS2011 GO CREATE TABLE CREDITO ( ID INT PRIMARY KEY, DETALLE XML NOT NULL )

SQL Server 2008

Base de Datos INSERTAR datos XML desde un archivo XML


USE NEGOCIOS2011 GO INSERT INTO CREDITO SELECT 3, DETALLE FROM (SELECT * FROM OPENROWSET (BULK 'C:\TEMP\CREDITOS.XML', SINGLE_BLOB) AS DETALLE) AS R(DETALLE) GO

SQL Server 2008

Base de Datos XML con tipo


CREATE XML SCHEMA COLLECTION schemaPedidos AS N'<?xml version="1.0" ?> <xsd:schema targetNamespace="http://schemas.mi_base.com/schema1" xmlns="http://schemas. mi_base.com/schema1" elementFormDefault="qualified" attributeFormDefault="unqualified" xmlns:xsd="http://www.w3.org/2001/XMLSchema" > <xsd:element name="Pedido"> <xsd:complexType> <xsd:sequence> <xsd:element name="Numero" type="xsd:string" minOccurs="1" maxOccurs="1"/> <xsd:element name="Cliente" type="xsd:string" minOccurs="1" maxOccurs="1"/> <xsd:element name="Importe" type="xsd:int" minOccurs="1" maxOccurs="1"/> </xsd:sequence> </xsd:complexType> </xsd:element> </xsd:schema>'

SQL Server 2008

Base de Datos XML con tipo


CREATE TABLE Pedidos (IdPedido int, Pedido xml (schemaPedidos)) Go INSERT INTO Pedidos VALUES (1, '<?xml version="1.0" ?> <Pedido xmlns="http://schemas.mi_base.com/schema1"> <Numero>2231-AX</Numero> <Cliente>Microsoft</Cliente> <Importe>250</Importe> </Pedido>') Go Select * from Pedidos Go

SQL Server 2008

Base de Datos Recuperando datos XML


Una consulta SELECT devuelve los resultados como un conjunto de filas. Opcionalmente, se pueden recuperar resultados formales de una consulta SQL como XML especificando la clusula FOR XML en la consulta. La clusula FOR XML puede usarse en consultas de nivel superior y en subconsultas.

SQL Server 2008

Base de Datos Recuperando datos XML FOR XML AUTO


USE NEGOCIOS 2011 GO SELECT C.NOMCLIENTE AS CLIENTE,C.DIRCLIENTE AS DIRECCION, IDPEDIDO,FECHAPEDIDO FROM VENTAS.CLIENTES C JOIN VENTAS.PEDIDOSCABE P ON C.IDCLIENTE = P.IDCLIENTE ORDER BY NOMCLIENTE FOR XML AUTO GO

SQL Server 2008

Base de Datos Recuperando datos XML FOR XML AUTO, ELEMENTS


USE NEGOCIOS 2011 GO SELECT C.NOMCLIENTE AS CLIENTE,C.DIRCLIENTE AS DIRECCION, IDPEDIDO,FECHAPEDIDO FROM VENTAS.CLIENTES C JOIN VENTAS.PEDIDOSCABE P ON C.IDCLIENTE = P.IDCLIENTE ORDER BY NOMCLIENTE FOR XML AUTO, ELEMENTS GO

SQL Server 2008

Base de Datos Recuperando datos XML FOR XML en modo RAW


USE NEGOCIOS 2011 GO SELECT IDPEDIDO,FECHAPEDIDO,C.NOMCLIENTE AS LIENTE, C.DIRCLIENTE AS DIRECCION FROM VENTAS.CLIENTES C JOIN VENTAS.PEDIDOSCABE P ON C.IDCLIENTE = P.IDCLIENTE ORDER BY IDPEDIDO FOR XML RAW GO

SQL Server 2008

Base de Datos Recuperando datos XML FOR XML en modo RAW, ELEMENTS
USE NEGOCIOS 2011 GO SELECT IDPEDIDO,FECHAPEDIDO,C.NOMCLIENTE AS LIENTE, C.DIRCLIENTE AS DIRECCION FROM VENTAS.CLIENTES C JOIN VENTAS.PEDIDOSCABE P ON C.IDCLIENTE = P.IDCLIENTE ORDER BY IDPEDIDO FOR XML RAW , ELEMENTS GO

SQL Server 2008

Base de Datos Recuperando datos XML FOR XML en modo EXPLICIT


USE NEGOCIOS 2011 GO SELECT 1 AS TAG, NULL AS PARENT, IDCLIENTE AS [CLIENTE!1!CODIGO], NOMCLIENTE AS [CLIENTE!1!NOMBRE] FROM VENTAS.CLIENTES FOR XML EXPLICIT

SQL Server 2008

Base de Datos Recuperando datos XML FOR XML en modo PATH


USE NEGOCIOS 2011 GO SELECT IDEMPLEADO "@ID", ApeEmpleado "EMPLEADO/APELLIDO", NomEmpleado "EMPLEADO/NOMBRE", DirEmpleado "EMPLEADO/DIRECCION" FROM RRHH.EMPLEADOS FOR XML PATH GO

SQL Server 2008

Base de Datos Recuperando datos con OPENXML


DECLARE @XmlDocumentHandle int DECLARE @XmlDocument nvarchar(1000) SET @XmlDocument = N'<ROOT> <Cliente IDCliente="VINET" Nombre="Paul Henriot"> <Pedido IDpedido="10248" IDCliente="VINET" IDEmpleado="5" Fecha="1996-07-04T00:00:00"> <PedidoDetalle IDProducto="11" Cantidad="12"/> <PedidoDetalle IDProducto="42" Cantidad="10"/> </Pedido> </Cliente> <Cliente IDCliente="LILAS" Nombre="Carlos Gonzlez"> <Pedido IDpedido="10283" IDCliente="LILAS" IDEmpleado="3" Fecha="1996-08-16T00:00:00"> <PedidoDetalle IDProducto="72" Cantidad="3"/> </Pedido> </Cliente> </ROOT>'

SQL Server 2008

Base de Datos Recuperando datos con OPENXML


-- Crea una representacion interna del documento XML. EXEC sp_xml_preparedocument @XmlDocumentHandle OUTPUT, @XmlDocument -- Ejecuta la sentencia SELECT utilziando OPENXML SELECT * FROM OPENXML (@XmlDocumentHandle, '/ROOT/Cliente/Pedido/PedidoDetalle',2) WITH (IDpedido int '../@IDpedido', IDCliente varchar(10) '../@IDCliente', Fecha datetime '../@Fecha', IDProducto int '@IDProducto', Cantidad int '@Cantidad') EXEC sp_xml_removedocument @XmlDocumentHandle

SQL Server 2008

Base de Datos Recuperando datos con XQUERY


XQuery es el lenguaje utilizado para realizar consultas sobre instancias XML. Al igual que T-SQL se utiliza para realizar consultas sobre tablas de la base de datos, XQuery se utiliza para consultar sobre datos de instancias XML nativas; es un lenguaje estandarizado por los fabricantes y sus especificaciones se pueden consultar en W3C (http://www.w3.org/XML/Query);

INSERT INTO Pedidos VALUES (1, '<?xml version="1.0" ?> <Pedido xmlns="http://schemas.mi_base.com/schema1"> <Numero>1234-MX</Numero> <Cliente>HP</Cliente> <Importe>500</Importe> </Pedido>') Go

SQL Server 2008

Base de Datos Recuperando datos con XQUERY query(), exist() query(), exist()
select Pedido.query (' declare namespace my="http://schemas.mi_base.com/schema1"; /my:Pedido/my:Cliente') from Pedidos Go select * from Pedidos where Pedido.exist ( ' declare namespace my="http://schemas.mi_base.com/schema1"; /my:Pedido[(my:Cliente = "HP")]') = 1 Go

SQL Server 2008

Base de Datos
Base de Datos

SQL Server 2008

Você também pode gostar