una trigger tablas tabla saber registro quien para modifico modificacion historial genérico fecha detectar datos como cambios borro bitacora auditoria auditar sql sql-server sql-server-2012

tablas - trigger bitacora sql server 2008



¿Cómo rastrear los cambios en los registros en SQL Server? (3)

Esto se puede hacer creando después de insertar / activar la activación en las tablas que necesita rastrear. Usando las tablas lógicas Inserted / Deleted in sql server, puede rastrear los campos recién insertados y modificados en una tabla.

Insertado (tabla lógica): le dará los detalles de los registros recientemente insertados / valores actualizados (valores de columna).

Borrado (Tabla lógica): le dará el valor anterior de un campo antes de que se modifique / elimine.

Tengo la siguiente tabla que tiene registros de seguimiento de todos los estudiantes.

|==========================================| | ID | Department | Date | |==========================================| | 001 | English | Feb 3 2017 | | 001 | English | Feb 4 2017 | | 001 | Science | Mar 1 2017 | | 001 | Science | Apr 2 2017 | | 001 | Maths | Apr 7 2017 | | 002 | Maths | Feb 1 2017 | | 002 | Maths | Apr 7 2017 | | 003 | Maths | Apr 3 2017 | | 004 | Science | Feb 1 2017 | | 004 | Maths | Apr 7 2017 | |==========================================|

Necesito recuperar el registro anterior justo antes de que el alumno haya cambiado el departamento. Para el ejemplo anterior, el conjunto de registros devuelto debe

Para 001,

| 001 | English | Feb 4 2017 | | 001 | Science | Apr 2 2017 |

Para 002 y 003

Sin cambios

Para 004

| 004 | Science | Feb 1 2017 |

También existe la posibilidad de que el mismo usuario pueda volver al mismo departamento. por ejemplo, user001 puede cambiar del departamento a al departamento b al departamento c y al departamento a. He leído sobre T-SQL enviar y recibir. Pero no estoy seguro si eso ayudaría en este escenario. Por favor ayuda.


No estoy tan seguro, pero puede obtener ayuda con el concepto de procedimientos almacenados. Son funciones que forman parte de la base de datos. Puede configurar la pantalla cuando realiza la consulta


Una forma de hacerlo es usar la función ROW_NUMBER con partición para detectar cuándo cambia el valor de la columna Department .

Data de muestra

DECLARE @T TABLE (ID int, Department nvarchar(100), dt date); INSERT INTO @T (ID, Department, dt) VALUES (1, ''English'', ''Feb 3 2017''), (1, ''English'', ''Feb 4 2017''), (1, ''Science'', ''Mar 1 2017''), (1, ''Science'', ''Apr 2 2017''), (1, ''Maths '', ''Apr 7 2017''), (2, ''Maths '', ''Feb 1 2017''), (2, ''Maths '', ''Apr 7 2017''), (3, ''Maths '', ''Apr 3 2017''), (4, ''Science'', ''Feb 1 2017''), (4, ''Maths '', ''Apr 7 2017'');

Consulta

WITH CTE AS ( SELECT ID ,Department ,dt ,ROW_NUMBER() OVER (PARTITION BY ID, Department ORDER BY dt DESC) AS rnPart ,ROW_NUMBER() OVER (PARTITION BY ID ORDER BY dt DESC) AS rnID FROM @T ) SELECT ID ,Department ,dt FROM CTE WHERE rnPart = 1 AND rnID <> 1 ORDER BY ID ,dt ;

Resultado

+----+------------+------------+ | ID | Department | dt | +----+------------+------------+ | 1 | English | 2017-02-04 | | 1 | Science | 2017-04-02 | | 4 | Science | 2017-02-01 | +----+------------+------------+