TRIGGER DELETE

23/06/2004 - 11:06 por Celeste | Informe spam
Hola, tengo un trigger de delete que comprueba que para poder borrrar el
registro cumple unas condiciones (que no sea el ultimo con un código
determinado, que no este dado de baja...), es decir muchas comprobaciones,
si yo hago un delete from tabla1 where cod =1 ; me hace las comprobaciones,
es decir, salta el trigger.
El problema es si hago un delete from tabla1.

no salta el trigger y los elimina todos.

¿porque ocurre esto?
¿que debo hacer?
¿deberia usar un cursor??


gracias.

Preguntas similare

Leer las respuestas

#1 Angel
23/06/2004 - 12:05 | Informe spam
no se aconseja el uso de cursores salvo que sea extrictamente necesario...

porque no pruebas a hacer un IF dentro del trigger con una pequeña
comprobación? se lanza el trigger tambien¿

salu2!!!


"Celeste" escribió en el mensaje
news:
Hola, tengo un trigger de delete que comprueba que para poder borrrar el
registro cumple unas condiciones (que no sea el ultimo con un código
determinado, que no este dado de baja...), es decir muchas comprobaciones,
si yo hago un delete from tabla1 where cod =1 ; me hace las


comprobaciones,
es decir, salta el trigger.
El problema es si hago un delete from tabla1.

no salta el trigger y los elimina todos.

¿porque ocurre esto?
¿que debo hacer?
¿deberia usar un cursor??


gracias.


Respuesta Responder a este mensaje
#2 Celeste
23/06/2004 - 12:15 | Informe spam
No funciona, esta comprobado que se borran todos.

mi duda es:

Si yo quiero borrar 1000 registros ¿cuantas veces se activa el trigger
de delete?

1000 o 1.

gracias.
Respuesta Responder a este mensaje
#3 Angel
23/06/2004 - 12:18 | Informe spam
haber si alguien nos responde porque no tengo ni idea

de todas maneras lanzar 1000 veces el trigger hace que la consulta se
ejecute mas lenta mientras que si lo hace una vez

yo probaria a lanzar la consulta delete desde el analizar y veria el plan de
ejecucion en ambos casos

salu2!

"Celeste" escribió en el mensaje
news:
No funciona, esta comprobado que se borran todos.

mi duda es:

Si yo quiero borrar 1000 registros ¿cuantas veces se activa el trigger
de delete?

1000 o 1.

gracias.


Respuesta Responder a este mensaje
#4 Celeste
23/06/2004 - 12:30 | Informe spam
ya, eso lo se, pero el problema es que un dia se de a delete * y se me
borra toda la base de datos.

He encontrado algo en la ayuda de sql server
Consideraciones acerca de operaciones con varias filas

He probado a crear el trigger

ALTER trigger td_movimiento on dbo.movimientos INSTEAD OF delete as
begin


y parece que si que es lo que quiero pero me gustaria saber mas cosas sobre
eso.
Respuesta Responder a este mensaje
#5 Carlos Sacristan
23/06/2004 - 13:05 | Informe spam
Pues depende de las veces que ejecutes la instrucción DELETE... Si la
ejecutas una vez, el trigger saltará únicamente esa vez, y la tabla virtual
DELETED contendrá esos 1000 registros afectados por la operación. Ahora
bien, si ejecutas 1000 veces la misma operación, otras tantas 1000 veces se
ejecutará el trigger, y la tabla DELETED contendrá únicamente ese registro
afectado.

No sé cómo estarán puestas esas comprobaciones, pero es probable que
sólo hayas contemplado la opción de que se eliminen los registros de uno en
uno y no en un conjunto.

Y otra cosa, si puedes, en vez de realizar esas comprobaciones en un
trigger, realízalas dentro de un procedimiento almacenado. Tendrás mucho
mejor control de la situación que si le das permisos directamente al usuario
de conexión.

Y por último, si necesitas información sobre los triggers (y en general
sobre SQL Server), te recomiendo el (excelente) libro de Fernando Guerrero:
"SQL Server 2000: con ejemplos"


Un saludo

-
"Sólo sé que no sé nada. " (Sócrates)

Por favor, responder únicamente al foro
Se agradece la inclusión de sentencias DDL


"Celeste" escribió en el mensaje
news:
No funciona, esta comprobado que se borran todos.

mi duda es:

Si yo quiero borrar 1000 registros ¿cuantas veces se activa el trigger
de delete?

1000 o 1.

gracias.


Respuesta Responder a este mensaje
Ads by Google
Help Hacer una preguntaSiguiente Respuesta Tengo una respuesta
Search Busqueda sugerida