Campos Calculados.

06/08/2009 - 14:48 por José Antonio Muñoz | Informe spam
Hola al grupo,

tengo una tabla que contiene unos 150 campos aproximadamente, 60 de ellos
son calculados, es decir, los valores de esos campos se obtienen de los
campos de esta misma tabla y también de otras tablas. En principio he creado
cada campo asignandole una función para recoger el valor a través de una
consulta pero al hacer un select a la tabla tardaba mucho en ejecutarla.
Luego he decidido crear varios triggers que actualizan los campos calculados
en función de los valores de cada tabla. Por cada tabla de donde se obtienen
los datos he creado un trigger para actualizar dichos campos calculados,
además también en la tabla principal donde se crearon los campos también
tiene su trigger para que cada vez que se agrega o modifica un registro se
actualizen los campos calculados. ¿como puedo evitar que al ejecutar un
trigger de una de las tablas no se ejecute el trigger de la tabla principal
donde están los campos calculados?

create trigger a on principal after insert, update as
begin
update principal set campocalculado=(select dato from secundaria where
codigo=1) where codigo In (select codigo from inserted)
end

create trigger b on secundaria after insert, update as
begin
update principal set campocalculado=(select dato from secundaria where
codigo=1) where codigo In (select x from inserted)
end

Nota: x es un campo de secundaria que lo relaciona con la tabla principal.
 

Leer las respuestas

#1 Carlos Sacristan
06/08/2009 - 15:43 | Informe spam
Echa un vistazo al tema "Cómo establecer la opción nested triggers" en los
BOL.

"Caminar sobre el agua y desarrollar software a partir de unas
especificaciones es fácil, si ambas están congeladas."
Edward V. Berard, ingeniero informático

http://blogs.solidq.com/es/elrincondeldba


"José Antonio Muñoz" wrote in message
news:
Hola al grupo,

tengo una tabla que contiene unos 150 campos aproximadamente, 60 de ellos
son calculados, es decir, los valores de esos campos se obtienen de los
campos de esta misma tabla y también de otras tablas. En principio he
creado cada campo asignandole una función para recoger el valor a través
de una consulta pero al hacer un select a la tabla tardaba mucho en
ejecutarla. Luego he decidido crear varios triggers que actualizan los
campos calculados en función de los valores de cada tabla. Por cada tabla
de donde se obtienen los datos he creado un trigger para actualizar dichos
campos calculados, además también en la tabla principal donde se crearon
los campos también tiene su trigger para que cada vez que se agrega o
modifica un registro se actualizen los campos calculados. ¿como puedo
evitar que al ejecutar un trigger de una de las tablas no se ejecute el
trigger de la tabla principal donde están los campos calculados?

create trigger a on principal after insert, update as
begin
update principal set campocalculado=(select dato from secundaria where
codigo=1) where codigo In (select codigo from inserted)
end

create trigger b on secundaria after insert, update as
begin
update principal set campocalculado=(select dato from secundaria where
codigo=1) where codigo In (select x from inserted)
end

Nota: x es un campo de secundaria que lo relaciona con la tabla principal.

Preguntas similares