Control Errores y Transacciones

11/05/2005 - 17:33 por Asier | Informe spam
Hola grupo,

Tengo el siguiente proc almacenado:

CREATE PROCEDURE _spBorrar1
@id_Error int output
AS
begin tran

update tabla1 set nombre='a' where id=1
If @@Error<>0
Begin
Rollback tran
Print @id_Error
End

update tabla1 set numero™9999 where id=1
If @@Error<>0
Begin
Rollback tran
Return 1
End

Commit tran
GO

Está preparado para que falle la segunda update porque el campo numero es un
samllint. El problema que tengo, es que no sigue ejecutando el Rollback y el
Return y debería ¿no?. Saca un mensaje de error en la update y no prosigue.

¿Que hago mal?

Gracias y saludos,

Asier
 

Leer las respuestas

#1 Alejandro Mesa
11/05/2005 - 18:00 | Informe spam
Asier,

Como sabes que no pasa por ahi?

Puedes probar esto:

CREATE PROCEDURE _spBorrar1
@id_Error int output
AS
set nocount on

begin tran

update tabla1 set nombre='a' where id=1

If @@Error<>0
Begin
Rollback tran
raiserror('error updating tabla1, step 1.', 16, 1)
return 1
End

update tabla1 set numero™9999 where id=1
If @@Error<>0
Begin
Rollback tran
raiserror('error updating tabla1, step 2.', 16, 1)
Return 1
End

Commit tran

return 0
GO

declare @rv int
declare @error int

print @@trancount

exec @rv = _spBorrar1
set @error = coalesce(nullif(@rv, 0), @@error)

print @rv
print @@trancount
go

Dejanos saber si puedes ver el mensaje de la funcion raiserror.


AMB



"Asier" wrote:

Hola grupo,

Tengo el siguiente proc almacenado:

CREATE PROCEDURE _spBorrar1
@id_Error int output
AS
begin tran

update tabla1 set nombre='a' where id=1
If @@Error<>0
Begin
Rollback tran
Print @id_Error
End

update tabla1 set numero™9999 where id=1
If @@Error<>0
Begin
Rollback tran
Return 1
End

Commit tran
GO

Está preparado para que falle la segunda update porque el campo numero es un
samllint. El problema que tengo, es que no sigue ejecutando el Rollback y el
Return y debería ¿no?. Saca un mensaje de error en la update y no prosigue.

¿Que hago mal?

Gracias y saludos,

Asier




Preguntas similares