UPDATE Multifuncional

16/05/2005 - 21:44 por Luis Nivar | Informe spam
Saludos amigos.

estoy armando un trigger donde en dos instrucciones requiero algo como
estoe:

UPDATE mitabla set
@valorfinal=mitabla.valorfinal=mitabla.valorfinal+inserted.valor
from mitabla inner join inserted on mitabla.campopk= inserted.fk

/*luego debo sacar el valor inicial de la misma tabla para compararlo*/
select @valorinicial=mitabla.valorinicial
from mitabla inner join inserted on mitabla.campopk= inserted.fk

/*la idea es comparar el valorinicial con el valorfinal calculado*/
IF @valorinicial > @valorfinal
raiserror(.


Pero viendo mejor las cosas se me ha ocurrido reducirlo a un update unico:

UPDATE mitabla set
@valorfinal=mitabla.valorfinal=mitabla.valorfinal+inserted.valor ,
@valorinicial=mitabla.valorinicial
from mitabla inner join inserted on mitabla.campopk= inserted.fk

/*lo demas igual*/
IF @valorinicial > @valorfinal
raiserror(.


Y me sorprendo de que me lo compila y no me da ningun error y en las
pruebas aparentemente funciona bien. Que opinion tienen ustedes ? Es
realmente mas eficiente considerando que son tablas muy grandes ? Es
correcto hacer eso asi y no da problemas ? Si se fijan la segunda expresion
en el SET es una simple asignacion a una variable
@valorinicial=mitabla.valorinicial (sorprendentemente lo acepta) y
poniendolo asi @valorinicial=mitabla.valorinicial=mitabla.valorinicial
tambien me lo aceptaría obteniendo el mismo efecto.


Que creen de eso?

LN

Preguntas similare

Leer las respuestas

#6 Luis Nivar
17/05/2005 - 03:03 | Informe spam
La actualizacion del campo valorfinal al menos tengo que hacerla por un
trigger. Ademas el problema de las restricciones check es que genera
mensajes de error que los usuarios no entienden, en cambio en un trigger se
pueden personalizar. A menos que haya una manera que yo no sepa.

Aunque la esencia de mi mensaje no es tanto lo del uso del trigger. Es
sobre el UPDATE que asigna un valor a una variable que estoy preguntando.


"Maxi" wrote in message
news:
Hola, y por un trigger quieres hacer eso? no seria mejor una restriccion
Check?


Maxi - Buenos Aires - Argentina
Desarrollador 3 Estrellas
Msn:

Maxi.da[arroba]gmail.com

"Luis Nivar" escribió en el mensaje
news:
> Ok: La tabla (mitabla) tiene entre otros dos campos : valorinicial y
> valorfinal.
> mitabla.Valorfinal se va actualizando (sumando( en un trigger de insert


de
> una tabla de movimientos, la cual tiene un campo (campofk) como clave
> foranea de mitabla.
> La idea del trigger es evitar que mitabla.valorfinal llegue a ser mayor
> que
> mitabla.valorinicial.
>
>
>
> "Isaias Islas" wrote in message
> news:ude%
>> Roberto
>>
>> Seria conveniente que nos dijeras QUE QUIERES LOGRARAlgo asi.
>>
>> Amigos, quiero hacer esto, bla, bla, bla, bla.
>>
>> Para lo cual ocupo el siguiente codigo:
>>
>> Codigo
>>
>>
>
>


Respuesta Responder a este mensaje
#7 Luis Nivar
17/05/2005 - 03:05 | Informe spam
Es que valorfinal se va actualizando con un trigger. Es un campo calculado.
Pero si leen bien mi mensaje original veran que no es lo del trigger lo
primordial de mi inquietud, la que ustedes han tomado superficialmente.
Sobre lo que estoy preguntando sobre todo es por el UPDATE usado tanto para
actualizar como para devolver un valor.


"Isaias Islas" wrote in message
news:%
¿Porque no colocas un CHECK CONSTRAIN para dicha verificacion y te quitas


de
tantas broncas con los triggers?


Respuesta Responder a este mensaje
#8 Jose
17/05/2005 - 12:19 | Informe spam
Hola Luis
Ademas el problema de las restricciones check es que genera
mensajes de error que los usuarios no entienden, en cambio en un trigger


se
pueden personalizar. A menos que haya una manera que yo no sepa.



Ese ha sido precisamente uno de mis grandes problemas con sql server y los
usuarios. Son incontables las llamadas de soporte que uno recibe de los
usurios solo para que le traduzcan un mensaje de error generado por una
restriccion o por una violacion de una relacion. Eso es algo que futuras
versiones de sql server debieran mejorar, ya que las aplicaciones son para
usuarios comunes no para administradores de BD ni programadores.

Ahora bien, tambien me gustaria saber cuales alternativas hay para minimizar
ese problema que no sea utilizando un trigger y raiseerror. Si alguien tiene
alguna opcion que por favor la comparta.

Saludos

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