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

#6 BitOne®
27/05/2006 - 17:46 | Informe spam
la sugerencia que hace gustavo es muy acertada, como lo lo iba a hacer viniendo de el :) tremendo tipo.


@@error pierde su valor una vez es realizada alguna operacion sobre este.

ejemplo.

use pubs
/*
Objetivo : Test de la variable @@error
Author : BitOne®
Ejemplo : 1 de 2
Engine : Microsoft SQL Server 2000 - 8.00.679 (Intel X86)
Aug 26 2002 15:09:48 Copyright (c) 1988-2000 Microsoft Corporation
Desktop Engine on Windows NT 5.0 (Build 2195: Service Pack 4)
*/

select @@version
select 5 / 0 -- error provocado para prueba [division entre cero]
print @@error -- imprimir la variable @@error
if @@error <> 0 print 'Error sucedido' -- intentar ver valor de @@error ya es cero
if @@error <> 0 print @@error -- @@error Continua siendo cero ( 0 )

- Fin de test 1 de 2

/*
Objetivo : Test de la variable @@error
Author : BitOne®
Ejemplo : 2 de 2
Engine : Microsoft SQL Server 2000 - 8.00.679 (Intel X86)
Aug 26 2002 15:09:48 Copyright (c) 1988-2000 Microsoft Corporation
Desktop Engine on Windows NT 5.0 (Build 2195: Service Pack 4)
*/


Declare @j integer -- variable para el tratamiento de los errores
select 5 / 0 -- error provocado para prueba division entre cero
set @j = @@error -- asignar el valor del error a la variable
print @j -- imprimir la variable
if @j <> 0 print 'Error sucedido' -- variable continua con su valor
if @j <> 0 print @j -- variable continua con su valor

/* resultado del test

Server: Msg 8134, Level 16, State 1, Line 8
Divide by zero error encountered.
8134

Server: Msg 8134, Level 16, State 1, Line 23
Divide by zero error encountered.
8134
Error sucedido
8134
*/


Saludos,


-
BitOne®

http://www.yocsql.com

-



"Matías" escribió en el mensaje news:%
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..
> >
> >
>
>


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