ClubEnsayos.com - Ensayos de Calidad, Tareas y Monografias
Buscar

Modulo Adicional. Transact SQL


Enviado por   •  29 de Abril de 2019  •  Apuntes  •  3.136 Palabras (13 Páginas)  •  60 Visitas

Página 1 de 13

Modulo Adicional. Transact SQL

XML en SQL Server

¿Qué es XML?

Probablemente los alumnos que están leyendo estas líneas lo conocen ya más que de sobra, pero por si acaso mencionaremos algunas de sus características:

  • XML es un lenguaje de marcas que describe la estructura de los datos. Se parece a HTML, pero a diferencia de éste no tiene un conjunto fijo de etiquetas.
  • XML se basa en escribir etiquetas entre los símbolos.
  • Las etiquetas típicamente son auto-descriptivas, por ejemplo, podrían representar los nombres de las columnas de una tabla cuyos datos estamos exportando a XML.
  • Las etiquetas que se usan en un archivo XML y la forma de anidarlas no están predefinidas. Los diseñadores de aplicaciones pueden decidir libremente cómo desean codificar sus datos.
  • El estándar XML no define las estructuras ni el contenido, sino únicamente el formato.

Este es un ejemplo en el que se han extraído en forma de XML algunos datos de la tabla Sales.Currency de la base de datos AdventureWorks2008:

 

 

 

 

 

A título de curiosidad, la siguiente sentencia es la que hemos empleado para generar el XML anterior. Más adelante estudiaremos la cláusula FOR XML que aquí hemos utilizado:

 

SELECT TOP 3 CurrencyCode, Name FROM Sales.Currency

    FOR XML RAW('Divisa'), ROOT('Sales.Currency')

 

¿Para qué se puede utilizar XML?

Estos son algunos ejemplos:

  • Para compartir datos estructurados entre distintos sistemas.
  • Para compartir datos de manera estandarizada a través de Internet.
  • Para guardar documentos en archivos de forma que su contenido sea fácil de interpretar de forma mecánica.
  • Para serializar datos. Es una forma de salvar la información que hay en memoria a un archivo de texto que luego se puede transmitir o almacenar para más tarde "deserializarlo" dando lugar de nuevo a los mismos objetos en memoria.

Soporte de XML dentro de SQL Server

Hay varias formas en que SQL Server puede interactuar con XML:

  • La cláusula FOR XML de la sentencia SELECT permite serializar los resultados en forma de XML.
  • La función OpenXML realiza el proceso contrario: permite leer un bloque de XML y devolver los resultados en forma de tabla.
  • El tipo de datos XML permite almacenar información de tipo XML en una columna de una tabla, en variables y en parámetros de procedimientos y funciones. Se puede además implementar integridad de datos restringiendo el formato del XML mediante los XML Schema Collections.
  • El lenguaje XQuery permite realizar consultas y modificaciones sobre los campos de tipo XML mencionados en el punto anterior.

En los próximos apartados haremos una breve introducción acerca de cada una de estas opciones. Si quisiéramos tratarlas en profundidad y con detenimiento, se necesitaría prácticamente un módulo entero sólo para esto.

La cláusula FOR XML

Ya hemos visto un ejemplo más arriba en el que añadíamos la cláusula FOR XML al final de una sentencia SELECT para obtener los resultados en forma de XML en lugar de obtenerlos en forma de filas y columnas

[pic 1]

Detrás de FOR XML se pueden especificar distintos parámetros, como son RAW, AUTO, EXPLICIT y PATH, para modificar el formato del XML generado. El vídeo que acompaña a esta unidad presenta varios ejemplos.

 

SELECT Categoria.Name, Producto.ProductID, Producto.Name

    FROM Production.ProductSubCategory Categoria

    JOIN Production.Product Producto

        ON Producto.ProductSubCategoryID = Categoria.ProductSubCategoryID

    ORDER BY Categoria.Name

FOR XML AUTO

[pic 2]

Típicamente este tipo de sentencia de selección se usa desde un programa cliente que necesita disponer en formato XML de los datos que hay en el servidor de base de datos (por ejemplo, para exportarlos a un archivo). En este caso, puede ser más simple pedirle directamente al servidor que devuelva el XML, en lugar de solicitar que se devuelvan registros que luego habría que convertir en XML en el lado cliente.

La función OpenXML

Ya hemos mencionado que OpenXML realiza la labor contraria a FOR XML, es decir, recibe datos en formato XML y los convierte al formato de filas y columnas.

El tratamiento requiere primero importar el texto XML a SQL Server por el procedimiento que se considere oportuno (típicamente enviándolo desde la aplicación cliente). En el ejemplo que viene a continuación, lo hemos escrito directamente entre comillas y se lo hemos asignado a una variable.

Después se utiliza el procedimiento almacenado de sistema sp_xml_preparedocument, que analiza el texto XML y lo guarda en memoria del servidor en un formato interno que luego permite extraer los datos en forma relacional. Este procedimiento nos devuelve una variable de tipo INT conocida como "handle" que sirve para hacer referencia a esos datos almacenados en memoria.

A continuación, se usa la función OpenXML, que recibe el handle y una serie de argumentos que determinan en qué posición dentro del XML están los datos que se desea extraer como filas de resultado. OpenXML devuelve una tabla, que se puede usar en el mismo sitio que cualquier tabla "corriente", por ejemplo, en un JOIN, o en una SELECT como se hace en el ejemplo que viene a continuación.

Cuando terminemos de extraer los datos, no se nos debe olvidar llamar a sp_xml_removedocument para liberar los recursos consumidos por la llamada inicial a sp_xml_preparedocument.

 

DECLARE @texto VARCHAR(2000)

DECLARE @handle INT

SELECT @texto =

    '

       

       

       

     '

EXEC sp_xml_preparedocument @handle OUTPUT, @texto

SELECT * FROM

    OPENXML(@handle, '/Sales.Currency/Divisa')

    WITH (CurrencyCode nvarchar(50), Name nvarchar(50))

EXEC sp_xml_removedocument @handle

 

[pic 3]

Como ya hemos indicado, OpenXML admite distintas combinaciones de parámetros para indicar qué datos hay que extraer y en qué partes del XML se encuentran almacenados. El ejemplo anterior presentaba el caso más sencillo, en el que todos estaban al mismo nivel y todos estaban codificados como atributos en el XML. La Referencia [2] contiene información detallada y ejemplos.

...

Descargar como (para miembros actualizados)  txt (20.4 Kb)   pdf (995.5 Kb)   docx (941 Kb)  
Leer 12 páginas más »
Disponible sólo en Clubensayos.com