
Como usar variables de tipo XML en SQL Server
Los campos de tipo XML son muy efectivos para guardar información relacionada con un diseño Maestro – Detalle, los datos XML son soportados por todos los lenguajes de programación por lo que su uso es muy efectivo.
Como guardar los datos en formato XML
En el artículo de Campos XML en tablas se explica la creación de tablas con campos XML, ahora se va a crear una base de datos para una clínica veterinaria y una tabla de Propietarios con sus mascotas en un campo XML. (Ver Campos XML)
Crear la base de datos y la tabla para Propietarios.
Create database ClinicaVet
go
use ClinicaVet
go
Create table Propietarios
(
PropietariosCodigo nchar(10) not null ,
PropietariosNombre nvarchar(200) not null,
Mascotas XML,
PropietariosTelefono nvarchar(30),
constraint PropietariosPk primary key (PropietariosCodigo)
)
go
Insertar registros en la tabla propietarios.
Insert into Propietarios
(PropietariosCodigo, PropietariosNombre, Mascotas, PropietariosTelefono)
values
(‘CM00085214′,’CARLOS MONTENEGRO’,
‘<Mascotas>
<Mascota>
<Codigo>1285</Codigo>
<Descripcion>Gato</Descripcion>
<Nombre>Garfield</Nombre>
<FechaNacimiento>15/07/2015</FechaNacimiento>
</Mascota>
<Mascota>
<Codigo>89658</Codigo>
<Descripcion>Perro</Descripcion>
<Nombre>Cody</Nombre>
<FechaNacimiento>18/09/2005</FechaNacimiento>
</Mascota>
</Mascotas>’
,’948635251′),
(‘LV00074965′,’LUIS VILLANUEVA’,
‘<Mascotas>
<Mascota>
<Codigo>9625</Codigo>
<Descripcion>Gallo</Descripcion>
<Nombre>Aristides</Nombre>
<FechaNacimiento>05/04/1992</FechaNacimiento>
</Mascota>
<Mascota>
<Codigo>89345</Codigo>
<Descripcion>Loro</Descripcion>
<Nombre>Betito</Nombre>
<FechaNacimiento>18/09/2005</FechaNacimiento>
</Mascota>
<Mascota>
<Codigo>4545</Codigo>
<Descripcion>Rata</Descripcion>
<Nombre>Romulo Alan</Nombre>
<FechaNacimiento>08/10/2005</FechaNacimiento>
</Mascota>
</Mascotas>’
,’01-252858′)
go
Al listar los registros se muestran como sigue

Como crear variables de tipo XML en SQL Server
Para la creación de variables de tipo XML se utiliza la instrucción Declare como cualquier otra variable.
Declare @Mascotas xml
Set @Mascotas =
‘<Mascotas>
<Mascota>
<Codigo>1478</Codigo>
<Descripcion>Obeja</Descripcion>
<Nombre>Pana</Nombre>
<FechaNacimiento>05/10/2005</FechaNacimiento>
</Mascota>
<Mascota>
<Codigo>3574</Codigo>
<Descripcion>Sapo</Descripcion>
<Nombre>Kanko</Nombre>
<FechaNacimiento>21/09/2008</FechaNacimiento>
</Mascota>
<Mascota>
<Codigo>7958</Codigo>
<Descripcion>Gato</Descripcion>
<Nombre>Cat Sillas</Nombre>
<FechaNacimiento>10/01/2015</FechaNacimiento>
</Mascota>
</Mascotas>’
Select @Mascotas
go
Como insertar registros con campo XML
Para insertar registros que contienen campos de tipo XML se puede proceder de la forma como se presenta líneas arriba, pero lo recomendable es guardar los datos en una variable de tipo XML y luego usar esa variable en la instrucción Insert.
Teniendo los datos en la variable @Mascotas, luego usar la instrucción Insert
Declare @Mascotas xml
Set @Mascotas =
‘<Mascotas>
<Mascota>
<Codigo>1478</Codigo>
<Descripcion>Obeja</Descripcion>
<Nombre>Pana</Nombre>
<FechaNacimiento>05/10/2005</FechaNacimiento>
</Mascota>
<Mascota>
<Codigo>3574</Codigo>
<Descripcion>Sapo</Descripcion>
<Nombre>Kanko</Nombre>
<FechaNacimiento>21/09/2008</FechaNacimiento>
</Mascota>
<Mascota>
<Codigo>7958</Codigo>
<Descripcion>Gato</Descripcion>
<Nombre>Cat Sillas</Nombre>
<FechaNacimiento>10/01/2015</FechaNacimiento>
</Mascota>
</Mascotas>’
insert into Propietarios
(PropietariosCodigo, PropietariosNombre, Mascotas, PropietariosTelefono)
values
(‘IG00074125′,’Ingrid Gálvez’,@Mascotas,’986532143′)
go
Visualizando los datos
Select * from Propietarios
go

Al pulsar en el campo de Mascotas de Ingrid Gálvez se presenta este XML.

Como leer los datos de una variable XML
Para leer los datos de una variable de tipo XML en SQL Server se utiliza el método Query para la variable de tipo XML
Declare @Mascotas xml
Set @Mascotas =
‘<Mascotas>
<Mascota>
<Codigo>1478</Codigo>
<Descripcion>Obeja</Descripcion>
<Nombre>Pana</Nombre>
<FechaNacimiento>05/10/2005</FechaNacimiento>
</Mascota>
<Mascota>
<Codigo>3574</Codigo>
<Descripcion>Sapo</Descripcion>
<Nombre>Kanko</Nombre>
<FechaNacimiento>21/09/2008</FechaNacimiento>
</Mascota>
<Mascota>
<Codigo>7958</Codigo>
<Descripcion>Gato</Descripcion>
<Nombre>Cat Sillas</Nombre>
<FechaNacimiento>10/01/2015</FechaNacimiento>
</Mascota>
</Mascotas>’
Select @Mascotas.query(‘/Mascotas/Mascota/Codigo’)
go
El resultado se muestra en el XML siguiente

Para mostrar los datos de las mascotas
Declare @Mascotas xml
Set @Mascotas =
‘<Mascotas>
<Mascota>
<Codigo>1478</Codigo>
<Descripcion>Obeja</Descripcion>
<Nombre>Pana</Nombre>
<FechaNacimiento>05/10/2005</FechaNacimiento>
</Mascota>
<Mascota>
<Codigo>3574</Codigo>
<Descripcion>Sapo</Descripcion>
<Nombre>Kanko</Nombre>
<FechaNacimiento>21/09/2008</FechaNacimiento>
</Mascota>
<Mascota>
<Codigo>7958</Codigo>
<Descripcion>Gato</Descripcion>
<Nombre>Cat Sillas</Nombre>
<FechaNacimiento>10/01/2015</FechaNacimiento>
</Mascota>
</Mascotas>’
Select @Mascotas.query(‘/Mascotas/Mascota’)
go
El resultado se muestra en el XML siguiente

Para leer los datos de la tercera mascota
Declare @Mascotas xml
Set @Mascotas =
‘<Mascotas>
<Mascota>
<Codigo>1478</Codigo>
<Descripcion>Obeja</Descripcion>
<Nombre>Pana</Nombre>
<FechaNacimiento>05/10/2005</FechaNacimiento>
</Mascota>
<Mascota>
<Codigo>3574</Codigo>
<Descripcion>Sapo</Descripcion>
<Nombre>Kanko</Nombre>
<FechaNacimiento>21/09/2008</FechaNacimiento>
</Mascota>
<Mascota>
<Codigo>7958</Codigo>
<Descripcion>Gato</Descripcion>
<Nombre>Cat Sillas</Nombre>
<FechaNacimiento>10/01/2015</FechaNacimiento>
</Mascota>
</Mascotas>’
Select @Mascotas.query(‘(/Mascotas/Mascota)[3]’)
go
Como usar XML.value en SQL Server
Para poder leer los datos en un campo XML en detalle se puede usar el método value del XML
Para leer el nombre de la mascota
Declare @Mascotas xml
Set @Mascotas =
‘<Mascotas>
<Mascota>
<Codigo>1478</Codigo>
<Descripcion>Obeja</Descripcion>
<Nombre>Pana</Nombre>
<FechaNacimiento>05/10/2005</FechaNacimiento>
</Mascota>
<Mascota>
<Codigo>3574</Codigo>
<Descripcion>Sapo</Descripcion>
<Nombre>Kanko</Nombre>
<FechaNacimiento>21/09/2008</FechaNacimiento>
</Mascota>
<Mascota>
<Codigo>7958</Codigo>
<Descripcion>Gato</Descripcion>
<Nombre>Cat Sillas</Nombre>
<FechaNacimiento>10/01/2015</FechaNacimiento>
</Mascota>
</Mascotas>’
Declare @NombreMascota nvarchar(100)
set @NombreMascota = @Mascotas.value(‘(/Mascotas/Mascota/Nombre)[1]’,’nvarchar(100)’)
select @NombreMascota
go
El resultado nos devuelve el nombre de la primera mascota. Pana