2010-06-06 20 views

Respuesta

69

SQL Server causas no tienen acceso a las tablas 2 "mágicas" que contienen una fila para cada fila que se inserta, actualiza o suprime en la declaración que hizo el gatillo para ejecutar.

Para buscar todos los registros insertados en una instrucción INSERT:

select * from inserted 

Para todas las filas eliminadas en una instrucción DELETE:

select * from deleted 

Para las instrucciones UPDATE, cada fila actualizada será presente tanto en las tablas insertadas como en las eliminadas La tabla insertada mantendrá el nuevo valor de la fila después de la declaración de actualización, y la tabla eliminada mantendrá el valor anterior de la fila justo antes de la instrucción de actualización. Únase entre las dos tablas para obtener lo que necesita:

select i.*, d.* 
from inserted i 
join deleted d on (i.id = d.id) 
+0

+1 gracias por el hecho de que las filas de actualización están presentes tanto en tablas eliminadas como insertadas. – mdma

+0

Tanto como me gusta esta solución, me gustaría señalar que _si_ la tabla referida por el desencadenador no tiene una clave principal, la instrucción 'update' no será útil :( –

+0

Siempre que haya alguna manera de se unirá de manera significativa entre las dos tablas (como la cláusula WHERE de la instrucción UPDATE usada habitualmente), será significativa, incluso si la tabla no tiene una clave primaria formal. –

1

que querrá el gatillo especial elimina y tablas insertadas De MSDN:

En DML disparadores, las tablas insertadas y eliminadas se utilizan principalmente para llevar a cabo lo siguiente: Extender integridad referencial entre tablas. Insertar o actualizar datos en tablas base subyacentes a una vista. Prueba de errores y toma medidas en función del error. Encuentra la diferencia entre el estado de una tabla antes y después de una modificación de datos y toma medidas basadas en esa diferencia. La tabla eliminada almacena copias de las filas afectadas durante las instrucciones DELETE y UPDATE. Durante la ejecución de una instrucción DELETE o UPDATE, las filas se eliminan de la tabla de desencadenantes y se transfieren a la tabla eliminada. La tabla eliminada y la tabla de desencadenantes normalmente no tienen filas en común. La tabla insertada almacena copias de las filas afectadas durante las instrucciones INSERT y UPDATE. Durante una transacción de inserción o actualización, se agregan nuevas filas tanto a la tabla insertada como a la tabla de activación. Las filas en la tabla insertada son copias de las nuevas filas en la tabla de disparadores.

check here for more info

+0

Este enlace está muerto. ¿Puedes actualizarlo? –

+1

@FedericoTraiman, el enlace parece funcionar para mí, calculé que un enlace msdn probablemente no desaparecería. Sin embargo, he agregado algo del contenido al cuerpo de la respuesta. –

+0

¡Está vivo ahora! Gracias –

Cuestiones relacionadas