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