Pregunta sobre Transaccion

26/05/2006 - 14:21 por Matías | Informe spam
Hola a todos, tengo un sp que llama dentro a varios sp´s, lo que hice con
ayuda de uds. es crear una tabla temp., para poder llamar varias veces a los
sp segun la cantidad de registros de la tabla temporal, mi duda es que pasa
si en el sp_update1 se produce un error, por lo que sea, en los sp
anteriores que se realizaron insert se van a volver atrás los cambios?, o
hay que utilizar commint, rollback y como?

Create_procedure sp_principal AS
BEGIN
CREATE TABLE #BULCLE (Curso CHAR(3), IDCiclo INT)
INSERT INTO #BULCLE
Select Curso, IDCiclo from Cursos
IF @@ROWCOUNT = 0
BEGIN
SELECT 'Error, Al generar tabla temporal'
RETURN(0)
END
DECLARE @Curso CHAR(3), @IDCiclo INT -- Inicio el bucle
WHILE EXISTS (SELECT Curso FROM #BULCLE)
BEGIN
SELECT TOP 1 @Curso = Curso, @IDCiclo = IDCiclo FROM #BULCLE
IF @@ROWCOUNT = 0
BREAK
EXEC sp_insert1 (@Curso, @IDCiclo)
EXEC sp_insert2 (@Curso, @IDCiclo)
EXEC sp_update1 (@Curso, @IDCiclo)
EXEC sp_update2 (@Curso, @IDCiclo)
DELETE #BULCLE WHERE Curso = @Curso
CONTINUE
END
END
GO

Muchas gracias..

Preguntas similare

Leer las respuestas

#1 Carlos Sacristán
26/05/2006 - 15:01 | Informe spam
Si no lo metes dentro de una transacción no va a deshacer nada...


Un saludo

-
"Sólo sé que no sé nada. " (Sócrates)

"Matías" escribió en el mensaje
news:
Hola a todos, tengo un sp que llama dentro a varios sp´s, lo que hice con
ayuda de uds. es crear una tabla temp., para poder llamar varias veces a


los
sp segun la cantidad de registros de la tabla temporal, mi duda es que


pasa
si en el sp_update1 se produce un error, por lo que sea, en los sp
anteriores que se realizaron insert se van a volver atrás los cambios?, o
hay que utilizar commint, rollback y como?

Create_procedure sp_principal AS
BEGIN
CREATE TABLE #BULCLE (Curso CHAR(3), IDCiclo INT)
INSERT INTO #BULCLE
Select Curso, IDCiclo from Cursos
IF @@ROWCOUNT = 0
BEGIN
SELECT 'Error, Al generar tabla temporal'
RETURN(0)
END
DECLARE @Curso CHAR(3), @IDCiclo INT -- Inicio el bucle
WHILE EXISTS (SELECT Curso FROM #BULCLE)
BEGIN
SELECT TOP 1 @Curso = Curso, @IDCiclo = IDCiclo FROM #BULCLE
IF @@ROWCOUNT = 0
BREAK
EXEC sp_insert1 (@Curso, @IDCiclo)
EXEC sp_insert2 (@Curso, @IDCiclo)
EXEC sp_update1 (@Curso, @IDCiclo)
EXEC sp_update2 (@Curso, @IDCiclo)
DELETE #BULCLE WHERE Curso = @Curso
CONTINUE
END
END
GO

Muchas gracias..


Respuesta Responder a este mensaje
#2 Matías
26/05/2006 - 15:32 | Informe spam
OK, GRACIAS, supongo que seria algo asi?:

> Create_procedure sp_principal AS


begin transaction
> EXEC sp_insert1 (@Curso, @IDCiclo)
> EXEC sp_insert2 (@Curso, @IDCiclo)
> EXEC sp_update1 (@Curso, @IDCiclo)
> EXEC sp_update2 (@Curso, @IDCiclo)


commit transaction
> GO



Lo que no se donde debe ir, si es que va el RollBack ???

> Muchas gracias..
Respuesta Responder a este mensaje
#3 Maxi
26/05/2006 - 15:39 | Informe spam
Matias, debes controlar si hay errores y de haber debes poner el RollBack.
si usas SQL2k debes usar @@error, si usas SQL2005 podes usar Try/Catch




Salu2
Maxi [MVP SQL SERVER]
www.sqlgurus.org


"Matías" escribió en el mensaje
news:%233s$
OK, GRACIAS, supongo que seria algo asi?:

> Create_procedure sp_principal AS


begin transaction
> EXEC sp_insert1 (@Curso, @IDCiclo)
> EXEC sp_insert2 (@Curso, @IDCiclo)
> EXEC sp_update1 (@Curso, @IDCiclo)
> EXEC sp_update2 (@Curso, @IDCiclo)


commit transaction
> GO



Lo que no se donde debe ir, si es que va el RollBack ???

> Muchas gracias..




Respuesta Responder a este mensaje
#4 Gustavo Larriera [MVP]
26/05/2006 - 19:10 | Informe spam
Una breve sugerencia: No uses directamente @@ROWCOUNT (o @@ERROR etc etc)
... como buena práctica de programación, almacénala primero en una variable
y luego usa la variable.



Gustavo Larriera, MVP SQL
Uruguay LatAm
Blog: http://sqljunkies.com/weblog/gux/
MVP profile: http://aspnet2.com/mvp.ashx?GustavoLarriera
Este mensaje se proporciona "COMO ESTA" sin garantias y no otorga ningun
derecho / This posting is provided "AS IS" with no warranties, and confers
no rights.

"Matías" wrote in message
news:
Hola a todos, tengo un sp que llama dentro a varios sp´s, lo que hice con
ayuda de uds. es crear una tabla temp., para poder llamar varias veces a
los
sp segun la cantidad de registros de la tabla temporal, mi duda es que
pasa
si en el sp_update1 se produce un error, por lo que sea, en los sp
anteriores que se realizaron insert se van a volver atrás los cambios?, o
hay que utilizar commint, rollback y como?

Create_procedure sp_principal AS
BEGIN
CREATE TABLE #BULCLE (Curso CHAR(3), IDCiclo INT)
INSERT INTO #BULCLE
Select Curso, IDCiclo from Cursos
IF @@ROWCOUNT = 0
BEGIN
SELECT 'Error, Al generar tabla temporal'
RETURN(0)
END
DECLARE @Curso CHAR(3), @IDCiclo INT -- Inicio el bucle
WHILE EXISTS (SELECT Curso FROM #BULCLE)
BEGIN
SELECT TOP 1 @Curso = Curso, @IDCiclo = IDCiclo FROM #BULCLE
IF @@ROWCOUNT = 0
BREAK
EXEC sp_insert1 (@Curso, @IDCiclo)
EXEC sp_insert2 (@Curso, @IDCiclo)
EXEC sp_update1 (@Curso, @IDCiclo)
EXEC sp_update2 (@Curso, @IDCiclo)
DELETE #BULCLE WHERE Curso = @Curso
CONTINUE
END
END
GO

Muchas gracias..


Respuesta Responder a este mensaje
#5 Matías
26/05/2006 - 19:36 | Informe spam
Gracias muchachos !!!!

"Gustavo Larriera [MVP]" escribió en el mensaje
news:ef$
Una breve sugerencia: No uses directamente @@ROWCOUNT (o @@ERROR etc etc)
... como buena práctica de programación, almacénala primero en una


variable
y luego usa la variable.



Gustavo Larriera, MVP SQL
Uruguay LatAm
Blog: http://sqljunkies.com/weblog/gux/
MVP profile: http://aspnet2.com/mvp.ashx?GustavoLarriera
Este mensaje se proporciona "COMO ESTA" sin garantias y no otorga ningun
derecho / This posting is provided "AS IS" with no warranties, and confers
no rights.

"Matías" wrote in message
news:
> Hola a todos, tengo un sp que llama dentro a varios sp´s, lo que hice


con
> ayuda de uds. es crear una tabla temp., para poder llamar varias veces a
> los
> sp segun la cantidad de registros de la tabla temporal, mi duda es que
> pasa
> si en el sp_update1 se produce un error, por lo que sea, en los sp
> anteriores que se realizaron insert se van a volver atrás los cambios?,


o
> hay que utilizar commint, rollback y como?
>
> Create_procedure sp_principal AS
> BEGIN
> CREATE TABLE #BULCLE (Curso CHAR(3), IDCiclo INT)
> INSERT INTO #BULCLE
> Select Curso, IDCiclo from Cursos
> IF @@ROWCOUNT = 0
> BEGIN
> SELECT 'Error, Al generar tabla temporal'
> RETURN(0)
> END
> DECLARE @Curso CHAR(3), @IDCiclo INT -- Inicio el bucle
> WHILE EXISTS (SELECT Curso FROM #BULCLE)
> BEGIN
> SELECT TOP 1 @Curso = Curso, @IDCiclo = IDCiclo FROM #BULCLE
> IF @@ROWCOUNT = 0
> BREAK
> EXEC sp_insert1 (@Curso, @IDCiclo)
> EXEC sp_insert2 (@Curso, @IDCiclo)
> EXEC sp_update1 (@Curso, @IDCiclo)
> EXEC sp_update2 (@Curso, @IDCiclo)
> DELETE #BULCLE WHERE Curso = @Curso
> CONTINUE
> END
> END
> GO
>
> Muchas gracias..
>
>


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