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:
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:
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;
|
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 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
Ver todos los mensajes de Jignesh Raiyani
- 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