Duda sobre triggers

27/06/2007 - 08:24 por Juan Diego Bueno | Informe spam
Buenas:

Quería preguntaros como resolveis una situación concreta.
Tengo una tabla de proyectos cuya clave es un código. En ella tenemos un
campo TOTAL que recoge la suma de los importes de unas facturas que están en
otra tabla.Yo lo estoy resolviendo usando triggers tanto para eliminación
como para inserción y actualización, pero dichos desencadenadores acaban
usando cursores que recorren las tablas deleted o inserted. Dado que por
cuestiones de rendimiento no se aconseja el uso de cursores, ¿cómo podría
resolver esta situación de otra forma?

Se me ocurre que podría no usar ese campo y obtener el TOTAL en base a una
consulta, pero tal cual lo tengo ahora, me obligaría a cambiar bastantes
partes de mi aplicación, con lo cual quiero evitarlo.

Uso SQL Server 2005 Express

Gracias

Preguntas similare

Leer las respuestas

#16 Carlos M. Calvelo
28/06/2007 - 12:37 | Informe spam
On 27 jun, 22:36, "Juan Diego Bueno"
wrote:

De todas formas, me gusta más la solución de Jesús que permite hacerlo todo
con un solo trigger para las tres operaciones



Ah!, quizás te interese para entender todavía mejor lo que pasa:

Si pones los dos updates uno detras de otro también tienes
un solo trigger para las tres operaciones.
Solo que para los insert uno está de adorno y para los
deletes el otro. Igual que los dos selects que hacen la UNION ALL
en el trigger de Jesús.

Saludos,
Carlos
Respuesta Responder a este mensaje
#17 Alfredo Novoa
28/06/2007 - 12:43 | Informe spam
On Wed, 27 Jun 2007 16:03:48 -0300, "Maxi"
wrote:

Hola, bueno no siempre es la mejor solucion



Ya, pero por que no siempre funcionan bien y tienen muchas
limitaciones en las versiones actuales de SQL Server. En principio las
vistas son siempre más deseables que los triggers, pero tienen que
funcionar bien, claro.


Saludos
Respuesta Responder a este mensaje
#18 Juan Diego Bueno
28/06/2007 - 13:22 | Informe spam
Muchas gracias Carlos, ya entendía el funcionamiento más o menos, sobre todo
lo que supone el dejar de pensar en cursores para estas operaciones, que es
lo que me interesaba.

Alfredo: Ya he visto como van las vistas indexadas, al menos a nivel de solo
consulta, pero sobre lo que ya está hecho, experimentaré en el futuro,
cuando tenga al menos una versión operativa. Para otras entidades de la base
de datos con las que aún no me he puesto, empezaré a experimentar

Saludos

"Carlos M. Calvelo" escribió en el mensaje
news:
On 27 jun, 22:36, "Juan Diego Bueno"
wrote:

De todas formas, me gusta más la solución de Jesús que permite hacerlo
todo
con un solo trigger para las tres operaciones



Ah!, quizás te interese para entender todavía mejor lo que pasa:

Si pones los dos updates uno detras de otro también tienes
un solo trigger para las tres operaciones.
Solo que para los insert uno está de adorno y para los
deletes el otro. Igual que los dos selects que hacen la UNION ALL
en el trigger de Jesús.

Saludos,
Carlos
Respuesta Responder a este mensaje
#19 Maxi
28/06/2007 - 15:00 | Informe spam
Claro, es una opcion a a analizar lo que quiero decir que no siempre las
cosas son blancas o negras, los triggers no son malos y las vistas tampoco,
hay que analizar cada caso. Yo uso mas las vistas que los triggers, pero
tambien en algunos casos uso los triggers


-
Microsoft M.V.P en SQLServer
SQLTotal Consulting - Servicios en SQLServer
Email:
"principiante" escribió en el mensaje
news:O%
No es por nada pero usted en sus mensajes cuando le dicen triggers dice
vista indexada y cuando le dicen vista indexada dice triggers... Quien le
entiende, amigo ? :(
Segun lo que el ha explicado se adapta mejor a una vista indexada aunque
tambien se pueda por triggers.


Jose TH



"Maxi" escribió en el mensaje
news:
Hola, bueno no siempre es la mejor solucion, la de triggers no es mala ni
mucho menos :)


-
Microsoft M.V.P en SQLServer
SQLTotal Consulting - Servicios en SQLServer
Email:
"principiante" escribió en el mensaje
news:
Lo mejor es una vista indexada para esas cosas.
Para eso las inventaron.


Jose TH


"Juan Diego Bueno" wrote in message
news:
Buenas:

Quería preguntaros como resolveis una situación concreta.
Tengo una tabla de proyectos cuya clave es un código. En ella tenemos
un campo TOTAL que recoge la suma de los importes de unas facturas que
están en otra tabla.Yo lo estoy resolviendo usando triggers tanto para
eliminación como para inserción y actualización, pero dichos
desencadenadores acaban usando cursores que recorren las tablas deleted
o inserted. Dado que por cuestiones de rendimiento no se aconseja el
uso de cursores, ¿cómo podría resolver esta situación de otra forma?

Se me ocurre que podría no usar ese campo y obtener el TOTAL en base a
una consulta, pero tal cual lo tengo ahora, me obligaría a cambiar
bastantes partes de mi aplicación, con lo cual quiero evitarlo.

Uso SQL Server 2005 Express

Gracias















Respuesta Responder a este mensaje
#20 Jesús López
28/06/2007 - 17:34 | Informe spam
Debido a las limitaciones de las vistas indexadas a veces el problema no se
puede resolver con una vista indexada. Sin embargo a veces el problema se
puede resolver con una vista indexada más una vista sin indexar y a veces me
he encontrado casos que los he resuelto creando una vista indexada más un
trigger.

Las opciones son variadas y encontrar la mejor es la tarea de un buen
desarrollador de base de datos.

En el caso concreto de Juan Diego, la mejor opción parece ser el trigger,
sobre todo por el coste de desarrollo que conlleva usar una vista.

También existe otra opción que es la de cambiar el campo Total por un campo
calculado. La expresión podría hacer referencia una función que devolviera
el total para un determinado proyecto. Para acelerar el cálculo, podría
haber una vista indexada. Esto tiene la ventaja de que ya no se puede
modificar el campo Total al ser calculado. Pero tiene el inconviente de que
ralentiza las consultas sobre la tabla Proyecto y por tanto probablemente no
merezca la pena.

Saludos:

Jesús López.
Solid Quality Mentors
www.solidq.com

"Alfredo Novoa" escribió en el mensaje
news:
On Wed, 27 Jun 2007 16:03:48 -0300, "Maxi"
wrote:

Hola, bueno no siempre es la mejor solucion



Ya, pero por que no siempre funcionan bien y tienen muchas
limitaciones en las versiones actuales de SQL Server. En principio las
vistas son siempre más deseables que los triggers, pero tienen que
funcionar bien, claro.


Saludos



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