SQL Server - Rollback dentro de un CA

 
Vista:

Rollback dentro de un CA

Publicado por Mario (10 intervenciones) el 06/01/2011 23:07:18
Hola, saludos cordiales
Una Ayuda estoy realizando un proceso en sql y tengo donde debo calcular varias cosas pero bueno, para ello esoy creando un SP que llama a dos SP (SP1 y SP2) donde el SP1 posee un cursor y dentro de el llama a otro SP3 que se encarga de insertar datos y otros calculos la idea es que cuando el SP3 produce un error hay que realizar un rollback para registrar el error y continuar con el cursor del SP1 mi peregunta es ¿como controlo el rollback entro de un cursor ?

cursor C1
while( lo que sea)
begin
begin tran inserta
xxxxxxxx
condiciones
................................
exec sp3
if @error !=0
goto ERROR
else
loquesea+1
end

Error :

if @error>0
rollback
else
commint
fet next loquese
end
close cursor C1
deallocate cursor C1
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
Imágen de perfil de Isaias
Val: 3.250
Oro
Ha mantenido su posición en SQL Server (en relación al último mes)
Gráfica de SQL Server

RE:Rollback dentro de un CA

Publicado por Isaias (4558 intervenciones) el 07/01/2011 00:43:02
Mario

Sin comprender aun sobre el llamado de los procedimientos, te comento que cada PROCEDIMEINTO controla las transacciones propias de este.

Por otro lado, NO es recomendable el uso de cursores.

Si me explicas un poco mas sobre tu proceso y el de porque mandar a llamar a otros procedimientos, te podria dar una opinion de como hacer tu proceso, sobre todo, eliminar el uso de cursores.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Rollback dentro de un CA

Publicado por Mario (10 intervenciones) el 07/01/2011 16:00:32
Hola, Gracias por tu ayuda
estoy haciendo un proceso que se ejecutaba por DTS a uno llamado por Interfaz desde asp.net 2003 en sql 2000 te explico la idea
hay que pagar en forma automatica los debitos que nos envian los Bancos, como el formato de cada banco es diferente realizo un sp para el banco1 y el otro sp para el banco2 como debo mantener un historial creo una tabla comun donde se almacena la información cumun de cada archivo ,por eso a los dos los uno en un SP General.

dentro de ese proceso hay que verificar varias validaciones de cada contrato por lo que utilizo el cursor y cada contrato debe pasar por una prioridad de pago y utilizo un while si cumple todo lo requerido se ejecuta un sp de pago que ya esta creado y en producción hace 2 años, si el pago es correcto se hace un commit y si existe algun problema en el pago de alguna cuota se hace un rollback y almacena en otra base de errores que paso para que se de el error , todo esto de cada contrato (dentro del cursor) el problema es que si utilizo transaccionabilidad ,en sql el exec funciona correctamente pero si lo paso a asp.net me sale error algo parecido a este:

"Distributed Transaction completed. Either enlist this session in a new transaction or the NULL transaction "

alguna idea....
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Isaias
Val: 3.250
Oro
Ha mantenido su posición en SQL Server (en relación al último mes)
Gráfica de SQL Server

RE:Rollback dentro de un CA

Publicado por Isaias (4558 intervenciones) el 07/01/2011 23:35:14
Tu proceso es BATCH, subir archivos, validar, aplicar o dejar en un estado diferente y todo esto almacenarlo en un historico.

SQL Server ,como MUCHOS otros motores de bases de datos, NO FUERON diseñados para "recorrer registro por registro", son muy torpes para estas acciones.

Te recomiendo, que SUBAS tu archivo texto a una tabla de paso y de ahi, APLIQUES lo que debas aplicar pero por GRUPOS DE REGISTROS, nunca utilizando cursores.

¿Me explico?
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar