Clausula FOR XML.
A partir de la version 2000 SQL Server incluye la clausula FOR XML para la consultas. Sin embargo, es a partir de la versión 2005 cuando se integra XML como tipo de dato nativo.
Cuando especificamos la clausula FOR XML el resultado de la consulta es devuelto en formato XML.
La clausula FOR XML admite los siguientes modos que representan el formato en el que el XML es devuelto:
- XML AUTO, el modo AUTO emplea los campos en la declaración SELECT para formar una jerarquía simple XML.
- XML RAW, el modo RAW genera elementos únicos, los cuales se denominan row, por cada fila retornada.
- EXPLICIT, el modo EXPLICIT requiere un formato específico que puede ser mapeado en casi cualquier forma XML, y al mismo tiempo ser formulado por una sola consulta SQL.
Adicionalmente, disponemos de dos opciones más TYPE y ELEMENTS que determinan el formato del XML resultante. Los vemos con ejemplos.
Un ejemplo de XML AUTO.
FROM FAMILIAS ORDER BY FAMILIA FOR XML AUTO, TYPE |
Obtendremos el siguiente resultado:
|
Podemos obtener el resultado como elementos de la siguiente forma:
FROM FAMILIAS FOR XML AUTO, ELEMENTS |
Obtendremos el siguiente resultado:
|
Ahora un ejemplo de XML RAW:
FROM FAMILIAS ORDER BY FAMILIA FOR XML RAW , TYPE |
Obtenemos el siguiente resultado:
|
Podemos obtener el resultado como elementos de la siguiente forma:
|
También es posible especificar el nodo que queremos que muestre:
FROM FAMILIAS ORDER BY FAMILIA FOR XML RAW ('FamiliasDeProductos') , TYPE |
Devuelve el siguiente resultado:
|
Del mismo modo con la opción ELEMENTS:
FROM FAMILIAS ORDER BY FAMILIA FOR XML RAW ('FamiliasDeProductos') , ELEMENTS |
Obtendremos el siguiente resultado:
|
Ahora un ejemplo con el formato XML EXPLICIT.
NULL AS PARENT, -- La segunda columna debe tener el alias PARENT -- El resto de columnas deben tener el alias en el formato: -- CO_FAMILIA as "FamiliaDeProductos!1!CODIGO_FAMILIA", FAMILIA as "FamiliaDeProductos!1!DESCRIPCION" FROM FAMILIAS ORDER BY FAMILIA FOR XML EXPLICIT |
Obtenemos el siguiente resultado:
|
Campos y variables XML.
Dado que XML es un tipo nativo de XML podemos definir tablas con campos de tipo XML, variables ...
El siguiente ejemplo muestra como trabajar con campos y variables XML.
CREATE TABLE tablaXML ( ID int not null identity, DOC xml null, constraint PK_tablaXML PRIMARY KEY (ID) ) GO DECLARE @xml xml -- Variable de tipo XML
SET @xml = (SELECT CO_FAMILIA, FAMILIA FROM FAMILIAS FOR XML AUTO)
INSERT INTO tablaXML (DOC) VALUES (@xml) -- Hacemos lo mismo con los productos SET @xml = (SELECT * FROM PRODUCTOS FOR XML AUTO)
(DOC) VALUES (@xml)
SELECT * FROM tablaXML |
Cuando consultemos la tabla tendremos la siguiente información (en mi caso claro!):
|
No hay comentarios:
Publicar un comentario