Ejemplo de Control de cambios

 

use TK432;

------------------------------------------------------------------
------		PREPARAMOS EL ENTORNO							------
------    Para comprender como funciona conviene ejecutar   ------
------    comando por comando...                            ------
------------------------------------------------------------------

------ Creamos una tabla cualquier para demostrar 
------ el concepto de change_tracking
if OBJECT_ID('Customer') is not null drop table Customer;
CREATE TABLE Customer(
	CustomerId uniqueidentifier NOT NULL PRIMARY KEY DEFAULT NEWID(), 
	CustomerName nvarchar(100) NOT NULL,
	SalesPerson nvarchar(100) NOT NULL,
	CustomerType nvarchar(100) NOT NULL);

--- Insertamos algunas filas	
insert into Customer( CustomerName, SalesPerson, CustomerType ) 
values	( 'C1', 'SP1', 'CT1');
insert into Customer( CustomerName, SalesPerson, CustomerType ) 
values	( 'C2', 'SP2', 'CT2');
insert into Customer( CustomerName, SalesPerson, CustomerType ) 
values	( 'C3', 'SP3', 'CT3');
insert into Customer( CustomerName, SalesPerson, CustomerType ) 
values	( 'C4', 'SP4', 'CT4');
insert into Customer( CustomerName, SalesPerson, CustomerType ) 
values	( 'C5', 'SP5', 'CT5');


------------------------------------------------------------------
------		CONFIGURAMOS EL ENTORNO							------
------------------------------------------------------------------

--- El bookonline nos recomienta habilitar esta propiedad
--- en mi caso NO lo hago porque tengo filestream habilitado
--- y dichos parámetros son incompatibles...
--- ALTER DATABASE TK432 SET ALLOW_SNAPSHOT_ISOLATION ON;

--- habilitamos change_tracking en la db tk432
--- con período de retención de 2 días
--- y la opción auto limpieza habilitada
ALTER DATABASE TK432
SET CHANGE_TRACKING = ON
(CHANGE_RETENTION = 2 DAYS, AUTO_CLEANUP = ON);

-- habilitamos control de cambios en la tabla customer
ALTER TABLE customer
ENABLE CHANGE_TRACKING
WITH (TRACK_COLUMNS_UPDATED = ON);


---- Aca podemos ver todos los datos, sin ningun cambio
SELECT * 
FROM CHANGETABLE(CHANGES customer, NULL) CT;


--- Ahora vamos a efectuar un update
update Customer
set CustomerName = 'C1 - Changed'
where CustomerId = '92721F80-BF4C-482E-9440-2728AD133B96';


--- Ahora vamos a efectuar un update
SELECT * 
FROM CHANGETABLE(CHANGES customer, NULL) CT;


-- Eliminemos una fila!!!
delete from Customer where CustomerId = '107946CF-4B3C-4A4A-B98D-2FDD1C205489';


--- Ahora vamos a efectuar un update y un delete 
--- fijate en la columna SYS_CHANGE_OPERATION
SELECT * 
FROM CHANGETABLE(CHANGES customer, NULL) CT;


--- Otro update
update Customer
set CustomerName = 'C1 - Changed 2'
where CustomerId = '92721F80-BF4C-482E-9440-2728AD133B96';

update Customer
set CustomerType = 'CT changed'
where CustomerId = '600BD48A-57F7-44C7-85DD-F6A08BC32FE7';


--- Ahora vamos a ver todos los cambios
--- (en el ejemplo solo updates y sobre la
--- columna CustomerName )
SELECT C.CustomerId, CustomerName --, OrderStatus, UpdateDTM 
  FROM Customer C
  JOIN CHANGETABLE(CHANGES Customer, 1) CT
    ON C.CustomerId = CT.CustomerID
   AND CT.SYS_CHANGE_OPERATION = 'U'
 WHERE CHANGE_TRACKING_IS_COLUMN_IN_MASK( 
	COLUMNPROPERTY( OBJECT_ID( 'Customer' ),'CustomerName', 'COLUMNID' ), 
	CT.SYS_CHANGE_COLUMNS ) = 1

 

Comentarios

Enviar un comentario nuevo

El contenido de este campo se mantiene privado y no se mostrará públicamente.
CAPTCHA
This question is for testing whether you are a human visitor and to prevent automated spam submissions.

Tags for Ejemplo de Control de cambios