transacción ejecutando procedimientos almacenados

26/02/2007 - 16:49 por Hugo Gsell | Informe spam
Mi problema es así... tengo varios storedprocedure que guardan datos sobre
una tabla (cada uno de una tabla distinta)

Si hago un UNICO storedprocedure que convoque a los otros ¿Esto puede
funcionar dentro de una transaccción?
Ejemplo: en este ejemplo tengo los storedprocedure uno y dos... luego creo
el Maestro que DENTRO DE UNA TRANSACCIÓN convoca a storedprocedure UNO y
DOS... si falla alguno FUNCIONA LA TRANSACCIón... espero que se entienda y
desde ya muchas gracias


Procedure UNO
graba en tabla uno
END

Procedure DOS
graba en tabla dos
END

Procedure MAESTRO
TRANSACTION
EXEC UNO
EXEC DOS
COMMINTTRANS
END


Hugo A. Gsell
Sgo del Estero
Argentina

Preguntas similare

Leer las respuestas

#1 Maxi
26/02/2007 - 16:56 | Informe spam
Hugo, claro que puede funcionar dentro de una transaccion , solo considera
el manejo de errores y si uno falla deberas hacer un rollback completo


Salu2

Microsoft MVP SQL Server
Culminis Speaker

"Hugo Gsell" escribió en el mensaje
news:%
Mi problema es así... tengo varios storedprocedure que guardan datos sobre
una tabla (cada uno de una tabla distinta)

Si hago un UNICO storedprocedure que convoque a los otros ¿Esto puede
funcionar dentro de una transaccción?
Ejemplo: en este ejemplo tengo los storedprocedure uno y dos... luego creo
el Maestro que DENTRO DE UNA TRANSACCIÓN convoca a storedprocedure UNO y
DOS... si falla alguno FUNCIONA LA TRANSACCIón... espero que se entienda y
desde ya muchas gracias


Procedure UNO
graba en tabla uno
END

Procedure DOS
graba en tabla dos
END

Procedure MAESTRO
TRANSACTION
EXEC UNO
EXEC DOS
COMMINTTRANS
END


Hugo A. Gsell
Sgo del Estero
Argentina


Respuesta Responder a este mensaje
#2 Jose Mariano Alvarez
26/02/2007 - 18:08 | Informe spam
Si haces un rollback eso cancela TODA la transaccion pero no detiene la
ejecucion la que continua con la proxima sentencia. Eso significa que debes
usar el codigo de retorno (RETURN) para indicar si termino bien el stored y
evitar seguir con la proxima sentencia en la llamada y controlar los errores
como dijo Maxi en cada sentencia de TSQL.

En 2005 es un poquito mas simple porque tienes TRY-CATCH.

Otra alternativa es hacer que cancele encualquier error (SET XACT_ABORT ON)
que te traer un par de consecuencias adicionales y por ello no es la forma
mas adecuada pero es mas simple.



Saludos
Ing. Jose Mariano Alvarez


(Cambia los ceros por O y saca lo que sobra)




"Maxi" wrote in message
news:
Hugo, claro que puede funcionar dentro de una transaccion , solo considera
el manejo de errores y si uno falla deberas hacer un rollback completo


Salu2

Microsoft MVP SQL Server
Culminis Speaker

"Hugo Gsell" escribió en el mensaje
news:%
Mi problema es así... tengo varios storedprocedure que guardan datos
sobre una tabla (cada uno de una tabla distinta)

Si hago un UNICO storedprocedure que convoque a los otros ¿Esto puede
funcionar dentro de una transaccción?
Ejemplo: en este ejemplo tengo los storedprocedure uno y dos... luego
creo el Maestro que DENTRO DE UNA TRANSACCIÓN convoca a storedprocedure
UNO y DOS... si falla alguno FUNCIONA LA TRANSACCIón... espero que se
entienda y desde ya muchas gracias


Procedure UNO
graba en tabla uno
END

Procedure DOS
graba en tabla dos
END

Procedure MAESTRO
TRANSACTION
EXEC UNO
EXEC DOS
COMMINTTRANS
END


Hugo A. Gsell
Sgo del Estero
Argentina






Respuesta Responder a este mensaje
#3 Hugo Gsell
26/02/2007 - 19:48 | Informe spam
Haber si entiendo bien.. salvando LA SINTAXIS que no la tengo exacto de
memoria... pero ya tengo que cada stored procedure me devuelver el nro de
error (sacada de @@error)... o sea puedo tener algo así???:
Procedure MAESTRO
declare N1 int,
declare N2 int.

TRANSACTION
SELECT N1=EXEC UNO
IF N1=0
select n2=EXEC DOS
IF N2=0
COMMINT
ELSE
ROLLBACK
END
ELSE
ROLLBACK
END
COMMINTTRANS
END

Estaría bien??? si es así y ahora si entrando en detalles como hago que el
exec me devuelva el nro de error que viene en el return del storedprocedure
correspondiente????




"Jose Mariano Alvarez"
escribió en el
mensaje news:
Si haces un rollback eso cancela TODA la transaccion pero no detiene la
ejecucion la que continua con la proxima sentencia. Eso significa que
debes usar el codigo de retorno (RETURN) para indicar si termino bien el
stored y evitar seguir con la proxima sentencia en la llamada y controlar
los errores como dijo Maxi en cada sentencia de TSQL.

En 2005 es un poquito mas simple porque tienes TRY-CATCH.

Otra alternativa es hacer que cancele encualquier error (SET XACT_ABORT
ON) que te traer un par de consecuencias adicionales y por ello no es la
forma mas adecuada pero es mas simple.



Saludos
Ing. Jose Mariano Alvarez


(Cambia los ceros por O y saca lo que sobra)




"Maxi" wrote in message
news:
Hugo, claro que puede funcionar dentro de una transaccion , solo
considera el manejo de errores y si uno falla deberas hacer un rollback
completo


Salu2

Microsoft MVP SQL Server
Culminis Speaker

"Hugo Gsell" escribió en el mensaje
news:%
Mi problema es así... tengo varios storedprocedure que guardan datos
sobre una tabla (cada uno de una tabla distinta)

Si hago un UNICO storedprocedure que convoque a los otros ¿Esto
puede funcionar dentro de una transaccción?
Ejemplo: en este ejemplo tengo los storedprocedure uno y dos... luego
creo el Maestro que DENTRO DE UNA TRANSACCIÓN convoca a storedprocedure
UNO y DOS... si falla alguno FUNCIONA LA TRANSACCIón... espero que se
entienda y desde ya muchas gracias


Procedure UNO
graba en tabla uno
END

Procedure DOS
graba en tabla dos
END

Procedure MAESTRO
TRANSACTION
EXEC UNO
EXEC DOS
COMMINTTRANS
END


Hugo A. Gsell
Sgo del Estero
Argentina










Respuesta Responder a este mensaje
#4 Jose Mariano Alvarez
26/02/2007 - 20:12 | Informe spam
podrias usar return (@@error).
Yo suelo copiar el error a una variable interna para no perderlo ya que se
asigna luego de cada sentencia. En ese caso luego devuelves el valor de la
variable




Saludos
Ing. Jose Mariano Alvarez


(Cambia los ceros por O y saca lo que sobra)




"Hugo Gsell" wrote in message
news:%
Haber si entiendo bien.. salvando LA SINTAXIS que no la tengo exacto
de memoria... pero ya tengo que cada stored procedure me devuelver el nro
de error (sacada de @@error)... o sea puedo tener algo así???:
Procedure MAESTRO
declare N1 int,
declare N2 int.

TRANSACTION
SELECT N1=EXEC UNO
IF N1=0
select n2=EXEC DOS
IF N2=0
COMMINT
ELSE
ROLLBACK
END
ELSE
ROLLBACK
END
COMMINTTRANS
END

Estaría bien??? si es así y ahora si entrando en detalles como hago que el
exec me devuelva el nro de error que viene en el return del
storedprocedure correspondiente????




"Jose Mariano Alvarez"
escribió en el
mensaje news:
Si haces un rollback eso cancela TODA la transaccion pero no detiene la
ejecucion la que continua con la proxima sentencia. Eso significa que
debes usar el codigo de retorno (RETURN) para indicar si termino bien el
stored y evitar seguir con la proxima sentencia en la llamada y controlar
los errores como dijo Maxi en cada sentencia de TSQL.

En 2005 es un poquito mas simple porque tienes TRY-CATCH.

Otra alternativa es hacer que cancele encualquier error (SET XACT_ABORT
ON) que te traer un par de consecuencias adicionales y por ello no es la
forma mas adecuada pero es mas simple.



Saludos
Ing. Jose Mariano Alvarez


(Cambia los ceros por O y saca lo que sobra)




"Maxi" wrote in message
news:
Hugo, claro que puede funcionar dentro de una transaccion , solo
considera el manejo de errores y si uno falla deberas hacer un rollback
completo


Salu2

Microsoft MVP SQL Server
Culminis Speaker

"Hugo Gsell" escribió en el mensaje
news:%
Mi problema es así... tengo varios storedprocedure que guardan datos
sobre una tabla (cada uno de una tabla distinta)

Si hago un UNICO storedprocedure que convoque a los otros ¿Esto
puede funcionar dentro de una transaccción?
Ejemplo: en este ejemplo tengo los storedprocedure uno y dos... luego
creo el Maestro que DENTRO DE UNA TRANSACCIÓN convoca a storedprocedure
UNO y DOS... si falla alguno FUNCIONA LA TRANSACCIón... espero que se
entienda y desde ya muchas gracias


Procedure UNO
graba en tabla uno
END

Procedure DOS
graba en tabla dos
END

Procedure MAESTRO
TRANSACTION
EXEC UNO
EXEC DOS
COMMINTTRANS
END


Hugo A. Gsell
Sgo del Estero
Argentina














Respuesta Responder a este mensaje
#5 Hugo Gsell
26/02/2007 - 20:20 | Informe spam
si es lo que devuelve... el @@error EN UNA VARIABLE INTERNA... pero ¿COMO
ASIGNO A UNA VARIABLE CUANDO LLAMO DESDE UN PROCEDIMIENTO ALMACENADO A
OTRO... mediante EXEC???

Hugo A. Gsell



"Jose Mariano Alvarez"
escribió en el
mensaje news:OOn%
podrias usar return (@@error).
Yo suelo copiar el error a una variable interna para no perderlo ya que se
asigna luego de cada sentencia. En ese caso luego devuelves el valor de la
variable




Saludos
Ing. Jose Mariano Alvarez


(Cambia los ceros por O y saca lo que sobra)




"Hugo Gsell" wrote in message
news:%
Haber si entiendo bien.. salvando LA SINTAXIS que no la tengo exacto
de memoria... pero ya tengo que cada stored procedure me devuelver el nro
de error (sacada de @@error)... o sea puedo tener algo así???:
Procedure MAESTRO
declare N1 int,
declare N2 int.

TRANSACTION
SELECT N1=EXEC UNO
IF N1=0
select n2=EXEC DOS
IF N2=0
COMMINT
ELSE
ROLLBACK
END
ELSE
ROLLBACK
END
COMMINTTRANS
END

Estaría bien??? si es así y ahora si entrando en detalles como hago que
el exec me devuelva el nro de error que viene en el return del
storedprocedure correspondiente????




"Jose Mariano Alvarez"
escribió en el
mensaje news:
Si haces un rollback eso cancela TODA la transaccion pero no detiene la
ejecucion la que continua con la proxima sentencia. Eso significa que
debes usar el codigo de retorno (RETURN) para indicar si termino bien el
stored y evitar seguir con la proxima sentencia en la llamada y
controlar los errores como dijo Maxi en cada sentencia de TSQL.

En 2005 es un poquito mas simple porque tienes TRY-CATCH.

Otra alternativa es hacer que cancele encualquier error (SET XACT_ABORT
ON) que te traer un par de consecuencias adicionales y por ello no es la
forma mas adecuada pero es mas simple.



Saludos
Ing. Jose Mariano Alvarez


(Cambia los ceros por O y saca lo que sobra)




"Maxi" wrote in message
news:
Hugo, claro que puede funcionar dentro de una transaccion , solo
considera el manejo de errores y si uno falla deberas hacer un rollback
completo


Salu2

Microsoft MVP SQL Server
Culminis Speaker

"Hugo Gsell" escribió en el mensaje
news:%
Mi problema es así... tengo varios storedprocedure que guardan datos
sobre una tabla (cada uno de una tabla distinta)

Si hago un UNICO storedprocedure que convoque a los otros ¿Esto
puede funcionar dentro de una transaccción?
Ejemplo: en este ejemplo tengo los storedprocedure uno y dos... luego
creo el Maestro que DENTRO DE UNA TRANSACCIÓN convoca a
storedprocedure UNO y DOS... si falla alguno FUNCIONA LA
TRANSACCIón... espero que se entienda y desde ya muchas gracias


Procedure UNO
graba en tabla uno
END

Procedure DOS
graba en tabla dos
END

Procedure MAESTRO
TRANSACTION
EXEC UNO
EXEC DOS
COMMINTTRANS
END


Hugo A. Gsell
Sgo del Estero
Argentina


















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