Transaccion no deshace los cambios en un SP ...

Williams
09 de Septiembre del 2008
Hola a toda la comunidad de este foro, espero no repetir este post pero no encontre un tema relacionado.
Mi problema es que tengo el siguiente procedimiento:

create table x (idx int, nombre varchar(10))
go
-- PARA PROBAR LA EFECTIVIDAD DE UNA TRANSACCION, TRATO DE
-- INSERTAR UN REGISTRO EN UNA TABLA QUE NO EXISTE
create procedure spX
as
declare @fracaso int
set @fracaso=0
begin tran
insert into x values(3,'mayito')
if @@error!=0
set @fracaso=@@error
insert into y values(2,'vic') -- GENERA ERROR Y ABORTA EL PROCEDIMIENTO
if @@error!=0 -- ESTA VALIDACION Y LO QUE SIGUE NO SE EJECUTA
set @fracaso=@@error
insert into x values(1,'will')
if @@error!=0
set @fracaso=@@error
if @fracaso!=0
begin
print 'Error en la transaccion'
rollback tran
return -100
end
commit tran
go

exec spx

Al ejecutar el procedimiento en el Analizador de consultas, no obtengo lo que suponia, es decir, el procedimiento se termina inmediatamente despues de provocar el error al tratar de insertar en una tabla que ya no existe, en teoria, deberia continuar con las siguientes instrucciones hasta llegar al rollback o al commit pero no lo hace y por lo tanto no deshace la primera insercion.

Quisiera que los de mas alto nivel que yo me ilustraran por favor que es lo que esta ocurriendo.
Lo estoy probando en una version SQL Server 2000 en una maquina con Win XP.
Gracias de antemano por su amable respuesta.
Su servidor, Williams Rios.

mvallejos
09 de Septiembre del 2008
Ese scrip genera la tabla y el procedimiento almacenado.
La ejecucion de eso seria

Exec spX

pruebalo