Trigger instead of update

05/07/2007 - 11:33 por Juan Diego Bueno | Informe spam
Buenas grupo:

Pretendo crear una vista indexada que pueda ser modificable y que parte de
varias tablas base. Para poder ser modificable, hay que implementar los
triggers instead of, ya que como he comentado, tira de varias tablas.

Bien, el trigger instead of delete, no lo necesito, puesto que los deletes
se harán siempre sobre la tabla base y las claves foráneas para las tablas
relacionadas se actualizan en cascada
El trigger instead of insert es muy sencillo y ya lo tengo, no tiene mucho
misterio...
Pero el que no se como afrontar es el trigger update. Lo que viene en la
ayuda no hace sino confundirme.

La tabla principal base es Proyectos, y la relacionada es
Proyectos_Autonomias. Esta última, además de la id del proyecto, tiene como
clave fóránea una ID de autonomía. Respecto a las columnas de la primera,
había pensado en evaluar un IF UPDATED(columna) de cada una de las de la
tabla, y de ser así, hacer el update con un join con la tabla inserted. De
todas maneras, eso sería cambiar un update por x... dependiendo de cuantas
columnas hayan cambiado, no se si esto es lo más apropiado.

La tabla relacionada... es otra historia. Si se ha actualizado esa columna
puede pasar:

1. Que ya hubiera un valor de autonomía en esta tabla para ese proyecto y se
cambie por otro valor válido
2. Que anteriormente no hubiera registro de autonomia para ese proyecto, y
en la vista se le de un valor. Se haría el insert sobre esa tabla
3. Que ya hubiera un valor de autonomía en esa tabla para ese proyecto y se
le de un valor de cadena vacía (es de tipo varchar), eso debería borrar
entonces el registro de la tabla relacionada

Esta parte ya me mosquea más, puesto que si son varios los registros que se
actualizan tendría que mirar tanto con la tabla deleted como con la inserted
registro por registro... y ya no tengo tan claro como hacerlo (salvo por
cursores, claro)

Espero sugerencias. Gracias de antemano

Trabajo con SQL Server 2005

http://www.moondance.tk
 

Leer las respuestas

#1 Ricardo Passians
06/07/2007 - 13:16 | Informe spam
Para simplificar y comprender mejor el asunto puedes evaluar la posibilidad
de dividir el problema manteniendo triggers de update también independientes
para cada tabla de la vista.



Pretendo crear una vista indexada que pueda ser modificable y que parte de
varias tablas base. Para poder ser modificable, hay que implementar los
triggers








Por si acaso, no confundir lo que es una "vista indexada" con una vista
normal (que pueda tener o no un indice).

Saludos

Ricardo Passians

Preguntas similares