martes, 29 de octubre de 2019

Triggers y tipo XML en SQL server


Este día investigue como trabajar con el tipo XML de SQL server ya que si bien ya había manejado XML en SQL server, lo había manejado para conseguir la información para las tablas como se ha hecho desde la primera parte de la tarea programada, pero nunca había usado el tipo XML que tiene SQL server entre sus tipos de datos y la verdad me di cuenta que sería bastante útil para el grupo de datos el crear los XML para pruebas si lo hicieran creando los XML’s con el tipo XML de SQL server.
También inicie con la creación de triggers, el problema fue que no sabía que era el campo de la tabla de Evento que decía IP, además estaba teniendo problemas con los XMLAntes y AMLDespues ya que en ciertas circunstancias estos tenían que estar vacíos y no supe cómo crear un XML vacío.
A continuación links vistos para la investigación del tipo XML de SQL server:

 
A continuación el poco código que hice ya que no sabía cómo proceder con el campo IP hasta que el profesor contestara el correo que le envié:

CREATE TRIGGER  [dbo].[BeneficiariosInsertados] ON [dbo].[Beneficiario]
   AFTER INSERT
AS
BEGIN
                -- SET NOCOUNT ON added to prevent extra result sets from
                -- interfering with SELECT statements.
                SET NOCOUNT ON;

    declare @idUsuario int;    --El id del usuario
                declare @Numero_de_Cuenta nvarchar(50);  --Numero cuenta para buscar el idUsuario
                declare @Fecha date = GETDATE();
                declare @TipoEvento nvarchar(100) = N'Insertar Beneficiario';
                declare @idTipoEvento int;   --El id del tipo evento
                declare @IP int = 0;
                declare @XMLAntes xml;
                declare @XMLDespues xml;

                Select @Numero_de_Cuenta = NewBen.Numero_Cuenta, @idTipoEvento = TE.id                      --Determina NumeroCuenta y idTipoEvento
                from inserted NewBen, TipoEvento TE
                where TE.nombre = @TipoEvento;

                Select @idUsuario = CA.idCliente from CuentaAhorro CA where CA.Numero_Cuenta = @Numero_de_Cuenta;  --Id del usuario

                declare @TablaXml TABLE (  --Tabla variable para sacar XML del evento
                               id int NOT NULL,
                               idPersona int NOT NULL,
                              
                               idTipoID int NOT NULL,                                --De la tabla persona
                               Nombre nvarchar(100) NOT NULL,
                               Tipo_Documento_Identificacion nvarchar(100) NOT NULL,
                               Documento_Identificacion nvarchar(100) NOT NULL,
                               Telefono1 int NOT NULL,
                               Telefono2 int NOT NULL,
                               Email nvarchar(100) NOT NULL,
                               Fecha_Nacimiento date NOT NULL,

                               idParentesco int NOT NULL,
                               Parentesco nvarchar(3) NOT NULL,
                               Porcentaje int NOT NULL,
                               Activo int NOT NULL,
                               Fecha_Desactivacion date NULL,
                               Numero_Cuenta nvarchar(100) NOT NULL
                )

                insert into @TablaXml   --Insercion del Evento en tabla variable
                select newBen.id, newBen.idPersona, P.idTipoID, P.Nombre, P.Tipo_Documento_Identificacion,
                                               P.Documento_Identificacion, P.Telefono1, P.Telefono2, P.Email, P.Fecha_Nacimiento,
                                               newBen.idParentesco, newBen.Parentezco, newBen.Porcentaje, newBen.Activo,
                                               newBen.Fecha_Desactivacion, newBen.Numero_Cuenta
                from inserted newBen, Persona P
                Where P.id = newBen,idPersona

                set @XMLDespues = (Select * from @TablaXml as TablaXml for xml Auto, ELEMENTS XSINIL);  --XML del Evento

                insert into Evento (idTipoEvento, idUser, _IP, Fecha, XMLAntes, XMLDespues)  --Insercion final al evento
                values(@idTipoEvento, @idUsuario, @IP, @Fecha, @XMLAntes, @XMLDespues);

END

Tiempo dedicado al día de hoy: 2 horas

No hay comentarios:

Publicar un comentario