Trigers

27/01/2007 - 16:08 por SergioT | Informe spam
Hola

Estoy queriendo aprender a utilizar trigers y tengo mi primer caso , haber
si me pueden decir como hacerlo y de paso pasarme algunas referencias
rapidas para aprender a manejar trigers

Tengo las tablas
Grupo(idGrupo,nombreGrupo,idEncargado)
Empleado(idEmpleado,nombre., idGrupo,idEncargado)

donde empleado.idGrupo es el grupo al que pertenece el empleado y
empleado.idEncargado es el encargado del grupo, aunque es una columna
redundante la incorporé por tema de velocidad en las consultas y por el alto
uso que hare de la tabla empleado

La cuestion es que uando cambien Grupo.IdEncargado quiero disparar una
consulta de actualizacion a todos los registros que tienen el grupo al cual
se le esta cambiando el encargado y actualizarles el id del nuevo encargado.
Esto lo puedo lograr con una consulta de actualizacion en el SP que hace
update de la tabla grupo pero no quiero hacerlo así , quiero usar un triger
para ir conociendo el tema y por que por ahi si regero el SP de update de la
tyabla grupo por ahi y pierdo la logica de actualizacion de la tabla
Empleado

gracias por la ayuda
sergio

Preguntas similare

Leer las respuestas

#6 Hernan Nieto
29/01/2007 - 16:04 | Informe spam
Alejandro,

Gracias por la informacion, es muy util conocer el funcionamiento de
Sql Server a este nivel.

Saludos.
Respuesta Responder a este mensaje
#7 SergioT
30/01/2007 - 20:38 | Informe spam
Hola Alejandro

Miechi, otra cosa es opinar conociendo a fondo el producto, gracias por la
información tan detallada hacerca de la implementacion de los trigers, no la
sabia

Gracias
Salu2
Sergio

"Alejandro Mesa" escribió en el
mensaje news:
Hernan Nieto,

Ideales no creo, pero utiles en cierta forma si. No ideales porque la
forma
en que se implementan las tablas "deleted" e inserted" en 2000 es mediante
vistas que apuntan al log de transacciones. Las transacciones se graban de
forma sequencial, a medida que ocurren las modificaciones y leer estas
tablas
hace que tengamos que regresar a leer esa data, ademas de que esas vistas
o
tablas virtuales no estan indisadas, asi que la lectura se hara mediante
un
scan de las mismas.

Si la regla de negocio se puede llevar a cabo mediante integridad
referencial, entonces hacerlo, de lo contrario ver si se puede hacer via
procedimiento almacenado. Si esto no es posible, pues entonces hacerlo
mediante trigger.

Como esquema de seguridad, muchas veces se niega la manipulacion directa
de
las tablas "insert, update, delete" y solo se permite atrvas de
procedimientos, osea la interfaz de comunicacion con nuestra base de datos
se
hara mediante el uso de los procedimientos.


AMB

"Hernan Nieto" wrote:

Alejandro,

Con referencia a tu respuesta sobre el uso de procedimientos en lugar
de triggers, me sorprende que indiques lo anterior. Tenia entendido que
eran ideales para actualizaciones automaticas, como por ejemplo tablas
de auditoria. En el caso de usar procedimientos, se perderia la
actualizacion automatica por parte del Gestor de BD, tendriamos q
ejecutarlos dentro del codigo de programacion, es asi?. Podrias, por
favor, aclararme un poco mas el tema.

Desde ya, muchas gracias.

Saludos



Mesa avait prétendu :
> Sergio,
>
> Como ejercicio para aprender a programar los triggers esta bien, pero
> es
> preferible que esto lo hagas atraves de un procedimiento puesto que los
> triggers, aunque utiles, tienden a alargar la transaccion, pueden ser
> desabilitados, no se disparan automaticamente cuando hacemos insercion
> en
> masa, tampoco se disparan cuando hacemos un "truncate" de la tabla, y
> para
> aumentar uno mas, los resultados pueden ser los no esperados cuando
> usamos la
> nueva utilidad de "snapshot isolation".
>
> Avoid These Common Business Rule Implementation Mistakes
> http://www.devx.com/dbzone/Article/31985/0
>
> create trigger tr_grupo_upd on dbo.Grupo
> for update
> as
> if update(idEncargado)
> begin
> update e
> set e.idEncargado = i.idEncargado
> from dbo.Empleado as e inner join inserted as i
> on e.idGrupo = i.idGrupo
>
> if @@error != 0
> begin
> raiserror('Error actualizando tabla Empleado.', 16, 1)
> end
>
> end
> go
>
> Debes tener en cuenta que al denormalizar la tabla Empleado, de alguna
> forma
> debes garantizar que el valor de la columna [idEncargado] sea igual al
> valor
> de la columna [idEncargado] del grupo al que pertenecen en la tabla
> [Grupo].
> Deja poner un ejemplo de lo que trato de decir.
>
> update dbo.Empleado
> set idEncargado = 123
> where idGrupo = 345
> go
>
> De alguna manera debes garantizar que el empleado 123 es el encargado
> del
> grupo 345 en la tabla [Grupo], de lo contrario se rompe la integridad
> de tu
> base de datos. Este es uno de los problemas que genera la
> denormalizacion.
>
>
> AMB
>
> "SergioT" wrote:
>
>> Hola
>>
>> Estoy queriendo aprender a utilizar trigers y tengo mi primer caso ,
>> haber
>> si me pueden decir como hacerlo y de paso pasarme algunas referencias
>> rapidas para aprender a manejar trigers
>>
>> Tengo las tablas
>> Grupo(idGrupo,nombreGrupo,idEncargado)
>> Empleado(idEmpleado,nombre., idGrupo,idEncargado)
>>
>> donde empleado.idGrupo es el grupo al que pertenece el empleado y
>> empleado.idEncargado es el encargado del grupo, aunque es una columna
>> redundante la incorporé por tema de velocidad en las consultas y por
>> el alto
>> uso que hare de la tabla empleado
>>
>> La cuestion es que uando cambien Grupo.IdEncargado quiero disparar
>> una
>> consulta de actualizacion a todos los registros que tienen el grupo al
>> cual
>> se le esta cambiando el encargado y actualizarles el id del nuevo
>> encargado.
>> Esto lo puedo lograr con una consulta de actualizacion en el SP que
>> hace
>> update de la tabla grupo pero no quiero hacerlo así , quiero usar un
>> triger
>> para ir conociendo el tema y por que por ahi si regero el SP de update
>> de la
>> tyabla grupo por ahi y pierdo la logica de actualizacion de la tabla
>> Empleado
>>
>> gracias por la ayuda
>> sergio
>>
>>
>>



email Siga el debate Respuesta Responder a este mensaje
Ads by Google
Help Hacer una pregunta AnteriorRespuesta Tengo una respuesta
Search Busqueda sugerida