Eliminacion Multiple (Triggers)

Quisiera saber como puedo hacer para que un trigger(for deleted) se dispare correctamente cuando realizo la eliminación de más de una fila con una sola sentencia. No tengo problemas cuando se elimina una sola linea, pero cuando la eliminación es más de una linea el trigger no responde adecuadamente.

1 respuesta

Respuesta
1
Los datos modificados, borrados, y agregados, dentro de un trigger, pueden ser referenciados por dos tablas especiales creadas por SQL Server, dichas tablas se llaman Deleted e Inserted.
Cuando se ejecuta una instrucción de borrado "DELETE FROM table", los datos eliminados son almacenados en la tabla Deleted.
Cuando se Ejecuta una instrucción de Actualización es decir un UPDATE, en el momento de ejecución del trigger tenemos dos estados: el primero es el conjunto de datos antes de la modificación, que están en la tabla Deleted, y el segundo estado, son los registros modificados que representan el estado actual de la tabla, los cuales están en la tabla Inserted.
Cuando se ejecuta una instrucción de inserción los datos agregados están en la tabla Inserted.
DELETED e INSERTED son tablas, el problema que tienes es que si modificas o eliminas una fila dichas tablas tienen una sola fila y las podes acceder de la forma DELETED. ColumnName o INSERTED. ColumnName. Diferente es cuando la instrucción modifica más de una fila, las tablas DELETED e INSERTED tienen un conjunto de filas, por consiguiente hay varias formas de operar el conjunto de resultados, con cursores, o bien con SQL anidados, por ejemplo:
DELETE FROM TABLE1 WHERE TABLE1.CustomerID in (SELECT DELETED.custID FROM DELETED)
"Lo mismo se puede utilizar con la tabla INSERTED."
También se puede utilizar cursores, por ejemplo :
DECLARE deleted_cursor cursor local for
SELECT Deleted.custID From DELETED
DECLARE @custId int
Open deleted_cursor
fetch deleted_cursor into @custid
while(@@fetch_status=0)
begin
DELETE FROM TABLE1 where CustomerID=@custid
FETCH deleted_cursor into @custid
end
close deleted_cursor
deallocate deleted_cursor
Hola, disculpa la demora, pero recién me enviaron un correo indicándome que ya tengo respuesta, Gracias por los ejemplos, no los he realizado aun, pero los realizare cuanto antes, nuevamente gracias

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas