manejo de varios errores en procedimientos almacenados

10/08/2006 - 16:03 por Hugo Gsell | Informe spam
Hola.
Tengo un procedimiento almacenado que hace 2 actualizaciones (ver abajo):
La pregunta es.. ¿Luego de cada operacion insert debo hacer el control del
rollback... comminttran?

BEGIN transaction
INSERT INTO Tabla1 (campo1, campo2) VALUES (val1, val2)
SET @error = @@error
INSERT INTO Tabla2 (campo1, campo2) VALUES (val1, val2)
SET @error = @@error
SET @error = @@error

IF @error != 0
BEGIN
ROLLBACK TRANSACTION
END
ELSE
BEGIN
COMMIT TRANSACTION
SET @nIdExpte= @NuevoNro
END

Preguntas similare

Leer las respuestas

#1 Maxi
10/08/2006 - 16:18 | Informe spam
Hola, es una lastima no saber que version estas usando de SQL ya que ha
cambiado mucho desde la 2k a la 2005. Voy a suponer que tenes sql2000

BEGIN transaction
INSERT INTO Tabla1 (campo1, campo2) VALUES (val1, val2)
SET @error = @@error

IF @error != 0
BEGIN
ROLLBACK TRANSACTION
END



INSERT INTO Tabla2 (campo1, campo2) VALUES (val1, val2)
SET @error = @@error

IF @error != 0
BEGIN
ROLLBACK TRANSACTION
END

COMMIT TRANSACTION
SET @nIdExpte= @NuevoNro



Salu2

Microsoft MVP SQL Server
Culminis Speaker
INETA Speaker

"Hugo Gsell" escribió en el mensaje
news:
Hola.
Tengo un procedimiento almacenado que hace 2 actualizaciones (ver abajo):
La pregunta es.. ¿Luego de cada operacion insert debo hacer el control del
rollback... comminttran?

BEGIN transaction
INSERT INTO Tabla1 (campo1, campo2) VALUES (val1, val2)
SET @error = @@error
INSERT INTO Tabla2 (campo1, campo2) VALUES (val1, val2)
SET @error = @@error
SET @error = @@error

IF @error != 0
BEGIN
ROLLBACK TRANSACTION
END
ELSE
BEGIN
COMMIT TRANSACTION
SET @nIdExpte= @NuevoNro
END



Respuesta Responder a este mensaje
#2 Alejandro Mesa
10/08/2006 - 16:21 | Informe spam
Hugo,

Cancela la transaccion tan pronto encuentras un error.

BEGIN transaction
INSERT INTO Tabla1 (campo1, campo2) VALUES (val1, val2)

SET @error = @@error

if @error != 0 goto ErrorHandler

INSERT INTO Tabla2 (campo1, campo2) VALUES (val1, val2)

SET @error = @@error

if @error != 0 goto ErrorHandler

ErrorHandler:

if @error != 0
rollback transaction
else
commit transaction

return @error
go


Error Handling in SQL Server – a Background
http://www.sommarskog.se/error-handling-I.html

Implementing Error Handling with Stored Procedures
http://www.sommarskog.se/error-handling-II.html


AMB

"Hugo Gsell" wrote:

Hola.
Tengo un procedimiento almacenado que hace 2 actualizaciones (ver abajo):
La pregunta es.. ¿Luego de cada operacion insert debo hacer el control del
rollback... comminttran?

BEGIN transaction
INSERT INTO Tabla1 (campo1, campo2) VALUES (val1, val2)
SET @error = @@error
INSERT INTO Tabla2 (campo1, campo2) VALUES (val1, val2)
SET @error = @@error
SET @error = @@error

IF @error != 0
BEGIN
ROLLBACK TRANSACTION
END
ELSE
BEGIN
COMMIT TRANSACTION
SET @nIdExpte= @NuevoNro
END




Respuesta Responder a este mensaje
#3 Hugo Gsell
10/08/2006 - 17:21 | Informe spam
si uso sql 2000.
Exactamente así es como iba a hacerlo
Gracias.
Hugo A. Gsell
"Maxi" escribió en el mensaje
news:%
Hola, es una lastima no saber que version estas usando de SQL ya que ha
cambiado mucho desde la 2k a la 2005. Voy a suponer que tenes sql2000

BEGIN transaction
INSERT INTO Tabla1 (campo1, campo2) VALUES (val1, val2)
SET @error = @@error

IF @error != 0
BEGIN
ROLLBACK TRANSACTION
END



INSERT INTO Tabla2 (campo1, campo2) VALUES (val1, val2)
SET @error = @@error

IF @error != 0
BEGIN
ROLLBACK TRANSACTION
END

COMMIT TRANSACTION
SET @nIdExpte= @NuevoNro



Salu2

Microsoft MVP SQL Server
Culminis Speaker
INETA Speaker

"Hugo Gsell" escribió en el mensaje
news:
Hola.
Tengo un procedimiento almacenado que hace 2 actualizaciones (ver abajo):
La pregunta es.. ¿Luego de cada operacion insert debo hacer el control
del rollback... comminttran?

BEGIN transaction
INSERT INTO Tabla1 (campo1, campo2) VALUES (val1, val2)
SET @error = @@error
INSERT INTO Tabla2 (campo1, campo2) VALUES (val1, val2)
SET @error = @@error
SET @error = @@error

IF @error != 0
BEGIN
ROLLBACK TRANSACTION
END
ELSE
BEGIN
COMMIT TRANSACTION
SET @nIdExpte= @NuevoNro
END







Respuesta Responder a este mensaje
#4 Hugo Gsell
10/08/2006 - 17:23 | Informe spam
otra duda... si lo hago así y ocurre un error en el primer INSERT.
deshace la transacción pero ¿Continua ejecutando el siguiente insert?

Hugo A. Gsell
Sgo del Estero
Argentina


"Maxi" escribió en el mensaje
news:%
Hola, es una lastima no saber que version estas usando de SQL ya que ha
cambiado mucho desde la 2k a la 2005. Voy a suponer que tenes sql2000

BEGIN transaction
INSERT INTO Tabla1 (campo1, campo2) VALUES (val1, val2)
SET @error = @@error

IF @error != 0
BEGIN
ROLLBACK TRANSACTION
END



INSERT INTO Tabla2 (campo1, campo2) VALUES (val1, val2)
SET @error = @@error

IF @error != 0
BEGIN
ROLLBACK TRANSACTION
END

COMMIT TRANSACTION
SET @nIdExpte= @NuevoNro



Salu2

Microsoft MVP SQL Server
Culminis Speaker
INETA Speaker

"Hugo Gsell" escribió en el mensaje
news:
Hola.
Tengo un procedimiento almacenado que hace 2 actualizaciones (ver abajo):
La pregunta es.. ¿Luego de cada operacion insert debo hacer el control
del rollback... comminttran?

BEGIN transaction
INSERT INTO Tabla1 (campo1, campo2) VALUES (val1, val2)
SET @error = @@error
INSERT INTO Tabla2 (campo1, campo2) VALUES (val1, val2)
SET @error = @@error
SET @error = @@error

IF @error != 0
BEGIN
ROLLBACK TRANSACTION
END
ELSE
BEGIN
COMMIT TRANSACTION
SET @nIdExpte= @NuevoNro
END







Respuesta Responder a este mensaje
#5 Hugo Gsell
10/08/2006 - 17:25 | Informe spam
Si el if error antes del 'procedimiento' anda bien ahí nomás termina?
o sea.. NO SE EJECUTA lo que esta dentro del errorhandler... es decir, sql
encuentra un nombre de procedimiento (rutina)
interna ahí vuelve? o sea termina?


ErrorHandler:
if @error != 0



"Alejandro Mesa" escribió en el
mensaje news:
Hugo,

Cancela la transaccion tan pronto encuentras un error.

BEGIN transaction
INSERT INTO Tabla1 (campo1, campo2) VALUES (val1, val2)

SET @error = @@error

if @error != 0 goto ErrorHandler

INSERT INTO Tabla2 (campo1, campo2) VALUES (val1, val2)

SET @error = @@error

if @error != 0 goto ErrorHandler

ErrorHandler:

if @error != 0
rollback transaction
else
commit transaction

return @error
go


Error Handling in SQL Server - a Background
http://www.sommarskog.se/error-handling-I.html

Implementing Error Handling with Stored Procedures
http://www.sommarskog.se/error-handling-II.html


AMB

"Hugo Gsell" wrote:

Hola.
Tengo un procedimiento almacenado que hace 2 actualizaciones (ver abajo):
La pregunta es.. ¿Luego de cada operacion insert debo hacer el control
del
rollback... comminttran?

BEGIN transaction
INSERT INTO Tabla1 (campo1, campo2) VALUES (val1, val2)
SET @error = @@error
INSERT INTO Tabla2 (campo1, campo2) VALUES (val1, val2)
SET @error = @@error
SET @error = @@error

IF @error != 0
BEGIN
ROLLBACK TRANSACTION
END
ELSE
BEGIN
COMMIT TRANSACTION
SET @nIdExpte= @NuevoNro
END




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