Actualizacion de todos los registros de una tabla por un Error

10/11/2006 - 10:04 por Felix | Informe spam
Tengo un expediente X que se produce en muy pocas ocasiones pero se da. Se
ejecuta una sentencia de UPDATE que debe actualizar solo un registro, pero
de vez en cuando actualiza todos los registros de la base de datos.
Estuve mirando codigo y todo es correcto y asi lo hace bien siempre menos en
ciertas ocasiones.
Mientras que encuentro el porque pasa, he creado un Trigger que me verifique
los registros que se estan actualizado y si detecto que se produce este caso
raro(se da 1 vez cada 6 meses mas o menos), muestro un mensaje de error y
ejecuto un "rollback transaction" para que me desaga el UPDATE. Pero esto
puede ser que se actualicen mas de 750.000 registros y luego hecharlo para
atras.
¿Habria alguna manera de saber por transact-sql, los valores que se
actualizaran para detectar este caso raro? por lo que entiendo un Trigger
actua cuando ya se produjo la actualizacion y en DELETED e INSERT estan los
vales actualizados. Que son los que analizo para detectar el error.

Otra duda que tengo es que si al hacer el "rollback transaction" da para
atras los valores actualizados o todas las operaciones que hizo el programa?

Preguntas similare

Leer las respuestas

#1 Alejandro Mesa
10/11/2006 - 14:58 | Informe spam
Felix,

Por que no posteas la estructura de la tabla y la sentencia update?

Otra duda que tengo es que si al hacer el "rollback transaction" da para
atras los valores actualizados o todas las operaciones que hizo el programa?



Todas las operaciones DML que se ejecutan dentro de la transaccion.


AMB


"Felix" wrote:

Tengo un expediente X que se produce en muy pocas ocasiones pero se da. Se
ejecuta una sentencia de UPDATE que debe actualizar solo un registro, pero
de vez en cuando actualiza todos los registros de la base de datos.
Estuve mirando codigo y todo es correcto y asi lo hace bien siempre menos en
ciertas ocasiones.
Mientras que encuentro el porque pasa, he creado un Trigger que me verifique
los registros que se estan actualizado y si detecto que se produce este caso
raro(se da 1 vez cada 6 meses mas o menos), muestro un mensaje de error y
ejecuto un "rollback transaction" para que me desaga el UPDATE. Pero esto
puede ser que se actualicen mas de 750.000 registros y luego hecharlo para
atras.
¿Habria alguna manera de saber por transact-sql, los valores que se
actualizaran para detectar este caso raro? por lo que entiendo un Trigger
actua cuando ya se produjo la actualizacion y en DELETED e INSERT estan los
vales actualizados. Que son los que analizo para detectar el error.

Otra duda que tengo es que si al hacer el "rollback transaction" da para
atras los valores actualizados o todas las operaciones que hizo el programa?



Respuesta Responder a este mensaje
#2 Felix
10/11/2006 - 16:23 | Informe spam
Hola gracias por contestar,

La sentencia UPDATE que provoca el error, no se cual es En el programa
sobre esa tabla hay decenas de updates, estuve reforzando las posibilidades
de que una actualizacion a algo negativo me quede del tipo:

Update Stock set stock_tienda=stock_tienda--1 where articulo00, donde lo
que hago es quitar un numero negativo y claro dos guiones lo toma como un
comentario. Pero en ningun sitio es posible esto.

La estructura es muy simple es una tabla de stock con
centro,articuloCodigo,Stocktienda,ubicacion donde guardo el stock de cada
centro, para un articulo determinado.
Entonces si se actualiza la tabla y actualizo en mas de un centro es que se
produjo este desaguisado. Y a que esto no es posible. Pero claro se que se
actualizo en mas de un centro despues de hacer el UPDATE y analizar los
valores que tiene DELETED.


Un Saludo
Respuesta Responder a este mensaje
#3 Maxi
11/11/2006 - 16:11 | Informe spam
Felix tu problema esta detectado, es el comentario -- con lo cual no aplica
el where y por eso lo ejecuta a todos los registros


Saludos

[Microsoft MVP SQL Server]
www.sqlgurus.org
Buenos Aires - Argentina
"Felix" wrote in message
news:%
Hola gracias por contestar,

La sentencia UPDATE que provoca el error, no se cual es En el programa
sobre esa tabla hay decenas de updates, estuve reforzando las
posibilidades de que una actualizacion a algo negativo me quede del tipo:

Update Stock set stock_tienda=stock_tienda--1 where articulo00, donde
lo que hago es quitar un numero negativo y claro dos guiones lo toma como
un comentario. Pero en ningun sitio es posible esto.

La estructura es muy simple es una tabla de stock con
centro,articuloCodigo,Stocktienda,ubicacion donde guardo el stock de cada
centro, para un articulo determinado.
Entonces si se actualiza la tabla y actualizo en mas de un centro es que
se produjo este desaguisado. Y a que esto no es posible. Pero claro se que
se actualizo en mas de un centro despues de hacer el UPDATE y analizar los
valores que tiene DELETED.


Un Saludo

Respuesta Responder a este mensaje
#4 Felix
13/11/2006 - 10:15 | Informe spam
Hola,

Lo de negativo es lo que supuse que pasaria pero lo estuve buscando en todos
los sitios donde se hace el WHERE y veo que esta reforzado con un espacio en
blanco y un parentesis con lo que es imposible que se produzca un -- ya que
seria -(blanco)- o -(blanco)(parentesis)-

Por eso lo de mi desesperacion por que no tiene sentido. Todo lo que puede
provocarlo esta revisado y no existe. Pero lo peor de todo es que me sigue
actualizando la base de datos muy muy de vez en cuando. nose, problemas de
red? pero no tiene sentido que un problema de red se coma parte de una
sentencia. Y cuando pasa pues caput, se bloquea el sistema y adios el
inventario. Por eso poner lo del trigger que si pasa que lo eche para atras.
Y por eso mi pregunta si hay alguna manera de saber lo que se va a realizar
antes de hacer el UPDATE, ya encontre lo de los trigers con la clausula
INSTEAD OF, que creo que va a ser la unica forma.





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