Usando La Cláusula OUTPUT en SQL SERVER – SIN TRIGGERS

Por 0 No tags Permalink

La Clausula Output nos permite leer de las pseudo-tablas inserted y deleted para extraer información, sobre lo que ha acontecido en un registro. De deleted podemos saber lo que contenía el registro justo antes de realizar la sentencia para la fila en la que estamos, y de inserted, como se ha quedado el valor.

Si podemos recuperar los valores, insertarlos en una variable tipo tabla, también podemos en una tabla temporal, ¿Insertarlos directamente en una tabla temporal?

Se crea una tabla de #TEMP, para anotar todo lo que ocurra en la tabla original. Escenario típico que a veces realizamos con un trigger, o con un versionado de tabla.

CREATE TABLE Articulos (ID int PRIMARY KEY, Descripcion varchar(25), Precio decimal(10,2));

GO
INSERT INTO Articulos (ID, Descripcion, Precio)
VALUES (1,'Articulo Amarillo',10),
       (2,'Articulo Rojo',25.25),
       (3,'Articulo Verde',24.2),
       (4,'Articulo Marron',44);

CREATE TABLE #Temp (Old_ID int , New_ID int , 
					Old_Precio  decimal(10,2) , New_Precio  decimal(10,2) , 
					Old_Descripcion varchar(25), New_Descripcion varchar(25),
					Mensaje varchar(100));

UPDATE A
SET Precio = 11 OUTPUT deleted.id AS Old_ID,
                       inserted.id AS ID,
                       deleted.precio AS Old_Precio,
                       inserted.precio AS Precio,
                       deleted.descripcion AS Old_Descripcion,
                       inserted.descripcion AS Descripcion,
                       'Modificación de registro' AS Mensaje INTO #Temp
FROM Articulos A WHERE ID = 2;

INSERT INTO Articulos
OUTPUT inserted.ID, inserted.Descripcion, inserted.Precio , 'Nuevo Registro'
INTO #Temp (New_ID, New_Descripcion, New_Precio, Mensaje)
VALUES (5,'Articulo Naranja',2.4), (6,'Articulo Morado',6.25);

SELECT * FROM #Temp

DROP TABLE Articulos
DROP TABLE #Temp

Si ejecutamos el código el resultado seria:

1.- Tabla Articulo con los primeros 4 INSERT

2.- Table Articulo + INSERT + UPDATE

3.- Tabla Temporal con el Historial de Cambios

Siguiendo esta fórmula se puede adaptar a varias necesidades. Aún así, si tienes problemas para realizar la inserción o bien, quieres que revisemos tu código para ayudarte me puedes contactar.

Compara el precio para envíos nacionales e internacionales con hasta un 70% de ahorro.

No Comments Yet.

Leave a Reply

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *