Ayuda con los triggers

Estoy un poco perdido. Necesito ayuda.
Estuve mirando la ayuda de sql server 2000 (q es en lo q estoy trabajando) y me confunde un poco. Necesitaría q me echaras un cable en esto y si es posible, unas nociones o referencias sobre creación de triggers. Ahí va :
Tengo 2 tablas :
Tabla1 Tabla2
-------- --------
Código Tipo
Iva descripción
Existe integriadad referencial entre las tablas. Quiero hacer un trigger q
haga una actualización en cascada.
El campo Tipo de Tabla2 es clave foránea en Tabla1 con el nombre Iva.
Quiero hacer un trigger que haga lo
Siguiente : si modifico un valor del campo iva de Tabla2, el cual existe en Tabla1,
al cambiarlo en Tabla2 se cambie automáticamente en Tabla1. (Como la actualización
en cascada)

1 Respuesta

Respuesta
1
Para crear un trigger debes pinchar con el botón derecho en la tabla donde quieres crearlo y seleccionar Todas las tares/Manage Triggers.
En el formulario que te sale debes crear el trigger que quieres, en tu caso quedaría algo así:
CREATE TRIGGER Modifica_Tabla1 ON Tabla2
FOR UPDATE
AS
DECLARE @Iva_Insertado double, @Iva_Cambiado double
IF UPDATE(iva)
begin
SELECT @Iva_Insertado = iva FROM INSERTED
SELECT @Iva_CAmbiado = iva FROM DELETED
UPDATE Tabla1 SET Iva = Iva_Insertado WHERE Iva = Iva_Cambiado
end
Existen dos tablas especiales: "inserted" y "deleted". Ambas tablas son temporales. Cuando se realiza una operación de UPDATE, los datos antiguos se copian al objeto deleted y los nuevos al objeto inserted. Con los datos en estos objetos, puedes jugar de la forma que quieras extrayendolos y utilizándolos para insertarlos o compararlos o lo que tu quieras.
Es bueno también restringir lo máximo posible las funciones de los triggers mediante comparaciones de los datos modificados (Por eso coloco la comprobación de que se ha modificado el Iva), si no, puede ocurrir que se entre en bucles infinitos o que los triggers se disparen recursivamente de forma no deseada.
Espero que la explicación te ayude, de todas formas si deseas más información, ponte en contacto conmigo.
Gracias por la ayuda pero después de haberte escrito me puse a pensar y di con el trigger. Me quedo tal cual al tuyo salvo que yo le quite la comprobación de si modifica el iva. Pensé que no lo necesitaba y como tiraba igual... No sabia que pudiera dar lugar a lo mejor a bucles infinitos en el caso de no ponerlo. Gracias por ese apunte y por la ayuda mostrada.
Por cierto. También necesita controlar el borrado de registros de la tabla Tabla2. En el caso de que el valor del iva del registro a borrar estuviese en alguna tupla de la tabla tabla1, no permitiera borrarlo y, ademas, el trigger mostrara un msgbox, tipo visual basic pero con algo escrito por mi. En caso contrario, borrar ese registro de la tabla Tabla2.
¿Es aconsejable hacer esto en el mismo trigger que ya tengo creado o es mejor hacerlo en uno nuevo? ¿Cómo seria entonces?
Ah! Si en un mismo trigger quiero volver a hacer referencia a las tablas temporales inserted y deleted, ¿puede borrar su contenido en el caso de que no quiera usar su contenido anterior?
Gracias de nuevo.
Puedes utilizar el mismo trigger para realizar el control de borrado, pero no te lo recomiendo al no ser que ambos eventos (Update y Delete) realicen el mismo trabajo.
Para controlar el borrado crea un nuevo trigger, esta vez de borrado (CREATE TRIGGER Control_Borrado ON Tabla2
FOR DELETE). En este caso esta claro que el registro temporal "inserted" no existe ya que estas borrando registros.
Por otra parte nunca he intentado borrar los registros temporales, pero si no quieres usar su contenido no hace falta que los elimines, con no usar sus datos ya vale.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas