SQLShack

En este artículo, mostraremos cómo crear un documento de tipo de datos XML a partir de una tabla relacional utilizando diferentes formas de T-SQL. Por ejemplo, para la migración de datos, la información de la base de datos de SQL Server se puede exportar e importar mediante XML en otro marco de trabajo. XML es una forma estándar de extraer, almacenar y manipular datos. Un aspecto del trabajo con el tipo de datos XML es la creación de XML a partir de información relacional, que se realiza mediante la provisión FOR XML en SQL Server:

 Tabla a documento XML

Tabla a documento XML

Un tipo de datos XML se puede utilizar de forma alternativa en SQL Server. Este artículo explicará algunos usos fundamentales del XML. La palabra clave FOR XML es una disposición que se puede agregar con la instrucción SELECT query para preparar el documento XML en los formularios necesarios en un resultado de consulta. El resultado es una cadena Unicode que contiene componentes y cualidades controladas por los diferentes modos determinados en la provisión con FOR XML.

Los cuatro modos son:

  • RAW
  • AUTO
  • EXPLÍCITO
  • RUTA

La siguiente tabla muestra datos de muestra para una mayor aclaración de las diversas metodologías:

tabla de muestras

tabla de ejemplo

Modo automático

El modo automático es uno de los enfoques para convertir a los elementos XML de las filas de la tabla. Nombres de elemento del documento XML correspondientes al alias de columna o al nombre de columna de la consulta SELECT.

Por ejemplo, el resultado de la consulta se ha producido con un solo documento XML para los datos de ejemplo anteriores. El resultado de la consulta tenía 5 filas en un conjunto de resultados, que se cambia a un conjunto de resultados de celda solitaria. Esta metodología se utiliza en una función de un solo valor para devolver varias filas en una sola variable de retorno.

1
2
3

SELECCIONE user_id, fname, lname, email_
DE user_details
FOR XML AUTO;

Tabla a tipo de datos XML

Tipo de datos de tabla a XML

Aquí, produce automáticamente nombres de encabezado utilizando nombres de tabla.

Modo EXPLÍCITO

Para un mayor control sobre el estilo del XML posterior, los desarrolladores de SQL pueden usar el modo EXPLÍCITO. Con el modo EXPLÍCITO, el resultado de una consulta se cambiará a un único documento de tipo de datos XML con etiquetas y valores XML personalizados. El modo EXPLÍCITO creará un conjunto de etiquetas diferente para cada fila de un registro. Incluso, el modo EXPLÍCITO permite diseñar el formato XML ya que el usuario desea establecer la posición de los elementos en el formato de tipo de datos XML en la consulta SQL.

A continuación se muestra un ejemplo de uso del modo EXPLÍCITO:

Consulta SQL:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25

SELECCIONE 1 como etiqueta
NULL como padre,
user_id como ,
NULL COMO ,
NULL COMO ,
NULL COMO
DE user_details
UNIÓN
SELECCIONE 3 como etiqueta
1 como padre,
user_id como ,
fname COMO ,
lname COMO ,
email_ COMO
DE user_details
UNIÓN
SELECCIONE 2 como etiqueta,
1 como padre,
user_id como ,
fname COMO ,
lname COMO ,
email_ COMO
DE user_details
ORDER BY 3, 1
PARA XML EXPLÍCITO;

De modo EXPLICIT resultado:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20

<usuario>
<fname fname=»Jo» />
<lname lname=»Brown» />
</usuario>
<usuario>
<fname fname=»Katie» />
<lname lname=»McAskill-Blanco» />
</usuario>
<usuario>
<fname fname=»Mihail» />
<lname lname=»Frintu» />
</usuario>
<usuario>
<fname fname=»Jimmy» />
<lname lname=»Bischoff» />
</usuario>
<usuario>
<fname fname=»Alan» />
<lname lname=»Cervecero» />
</usuario>

 Modo EXPLÍCITO

Modo EXPLÍCITO

Modo RAW

El modo más común y utilizado por los desarrolladores para crear XML dentro DE XML es el modo RAW. Básicamente, el modo RAW muestra un elemento llamado » row » del conjunto de resultados para cada fila en la articulación SELECT, y el valor de celda de la fila estará limitado como un atributo del elemento. En un modo SIN PROCESAR, cada columna se tratará como un elemento en el XML, y las columnas de esas líneas se atribuirán al mismo elemento. El modo RAW se utiliza para cambiar cada fila del conjunto de resultados a un componente XML.

Para el modo de fila, varios modelos de consulta con diferentes salidas explicados en los siguientes ejemplos:

Ejemplo 1

1
2
3
4
5
6
7
8
9

SELECCIONE user_id, fname, lname, email_
DE user_details
PARA XML RAW
< row user_id = «1»fname=» Jo»lname=» Brown»email_=» [email protected]» />
<fila user_id=»2″ fname=»Katie» lname=»McAskill Blanco» email_=»[email protected]» />
<fila user_id=»3″ fname=»Mihail» lname=»Frintu» email_=»[email protected]» />
<fila user_id=»4″ fname=»Jimmy» lname=»Bischoff» email_=»[email protected]» />
<fila user_id=»5″ fname=»Alan» lname=»Cervecero» email_=»[email protected]» />

Con el modo RAW, el encabezado de cada elemento se define como un elemento row en el resultado XML y las columnas de cada fila se atribuyen dentro del elemento row en el resultado del tipo de datos XML.

Ejemplo 2

1
2
3
4
5
6
7
8
9
10
11

SELECCIONE user_id, fname, lname, email_
DE user_details
PARA XML RAW(‘usuario’), de la RAÍZ
<root>
<usuario user_id=»1″ fname=»Jo» lname=»Marrón» email_=»[email protected]» />
<usuario user_id=»2″ fname=»Katie» lname=»McAskill Blanco» email_=»[email protected]» />
<usuario user_id=»3″ fname=»Mihail» lname=»Frintu» email_=»[email protected]» />
<usuario user_id=»4″ fname=»Jimmy» lname=»Bischoff» email_=»[email protected]» />
<usuario user_id=»5″ fname=»Alan» lname=»Cervecero» email_=»[email protected]» />
</raíz>

Si el usuario desea incluir todos los elementos en una sola etiqueta, se puede usar la opción RAÍZ con el modo RAW y el usuario puede definir el nombre de encabezado de cada elemento agregando un nombre con RAW() en el resultado del tipo de datos XML.

Ejemplo 3

1
2
3
4
5
6
7
8
9
10
11

SELECCIONE user_id, fname, lname, email_
DE user_details
PARA XML RAW(‘usuario’), RAÍZ(‘UserDetails’)
<UserDetails>
<usuario user_id=»1″ fname=»Jo» lname=»Marrón» email_=»[email protected]» />
<usuario user_id=»2″ fname=»Katie» lname=»McAskill Blanco» email_=»[email protected]» />
<usuario user_id=»3″ fname=»Mihail» lname=»Frintu» email_=»[email protected]» />
<usuario user_id=»4″ fname=»Jimmy» lname=»Bischoff» email_=»[email protected]» />
<usuario user_id=»5″ fname=»Alan» lname=»Cervecero» email_=»[email protected]» />
</Detalles de usuario>

En la RAÍZ XML RAW, el encabezado se puede diseñar con un nombre definido por el usuario con la RAÍZ (). Como se puede observar en el ejemplo, el <root> elemento es reemplazado por el <UserDetails>

Ejemplo 4

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16

SELECCIONE user_id, fname, lname, email_
DE user_details
PARA XML PRIMAS, ELEMENTOS
<fila>
<user_id>1</user_id>
<fname>Jo</fname>
<lname>Brown</lname>
<email_>[email protected]</email_>
</fila>
<fila>
<user_id>2</user_id>
<fname>Katie</fname>
<lname>McAskill-Blanco</lname>
<email_>[email protected]< / correo electrónico>
</fila>

Usando la directiva ELEMENT con el modo RAW, el usuario puede crear XML basado en la estructura de elementos de fila. Cada celda de la fila se extrae con elementos XML dentro del elemento padre de la fila como <row>. Básicamente, usamos la palabra clave ELEMENTS en la consulta anterior para mostrar las columnas como elementos en el XML de salida.

Modo de ruta

El mejor modo para crear XML con más control sobre el formato es el modo de ruta. Con la RUTA de acceso, el usuario puede componer una SELECCIÓN más sencilla y proporcionar articulaciones XPATH para que la columna asigne una cadena de comandos. Úselo PARA RUTA XML con subconsultas para obtener el documento de tipo de datos XML adecuado con la cadena elemento-atributo:

1
2
3
4
5
6
7
8
9
10
11

SELECCIONE user_id, fname, lname, email_
DE user_details
DONDE email_ = ‘[email protected]
PARA la RUTA XML;
<fila>
<user_id>3</user_id>
<fname>Mihail</fname>
<lname>Frintu</lname>
<email_>[email protected]</email_>
</fila>

Conclusión

el Uso de un servidor de resultados de la consulta para lograr un diferente formato XML es sencillo. El resultado de la consulta se extraerá en XML mediante la inclusión de un eslogan FOR XML al final de la instrucción SELECT. Como se mencionó, tenemos una serie de alternativas para estructurar u organizar el resultado con columnas a atributos o nodos XML con el tipo de datos XML.

  • Autor
  • Publicaciones recientes
Jignesh Raiyani
Jignesh tiene buena experiencia en Soluciones y Arquitectura de Bases de datos, trabajando con múltiples clientes en Arquitectura de Diseño de Bases de datos &, Desarrollo SQL, Administración, Optimización de Consultas, Ajuste de Rendimiento, HA y Recuperación ante Desastres.
Ver todos los mensajes de Jignesh Raiyani

Jignesh Raiyani
Últimos mensajes de Jignesh Raiyani (ver todos)
  • Esperanza de vida útil de la página (PLE) en SQL Server-17 de julio de 2020
  • Cómo automatizar el particionamiento de tablas en SQL Server – 7 de julio de 2020
  • Configuración de grupos de disponibilidad Always On de SQL Server en AWS EC2-Julio 6, 2020

Leave a Reply

Tu dirección de correo electrónico no será publicada.