Como usar variables XML en SQL Server


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 un post anterior se explica la creación de tablas con campos XML (Ver Datos 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)

Ejercicio de como usar datos XML en SQL Server

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

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

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 seleccionar el campo XML del propietario Ingrid Gálvez se muestran sus mascotas

 



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

Para leer los códigos 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/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