Ver Mensaje Individual
  #2 (permalink)  
Antiguo 06/08/2008, 05:06
Avatar de matanga
matanga
 
Fecha de Ingreso: octubre-2007
Ubicación: España
Mensajes: 1.091
Antigüedad: 16 años, 6 meses
Puntos: 85
Respuesta: Error transaccion en sql srver 2000

Hola,

Hay varios problemas, pero el mas grave es la falta de capacidad del parser de SQL Server 2000 para generar un RAISE. En estos casos lo que tienes que hacer es preguntar por la variable @@ERROR (teniendo en cuenta que su valor cambia con cada ejecucion de una sentencia SQL), si es igual a 0, commit, y si es diferente de 0, rollback. Por ejemplo,

Código:
begin tran
  insert
if @@error = 0
  commit tran
else
  rollback tran
De esta manera, solo se ejecuta un fin de transaccion.

Ahora bien, sigamos adelante, estoy suponiendo que el codigo posteado es solo un ejemplo, dado que no tiene sentido poner dentro de una transaccion explicita una sola sentencia SQL, para esto puedes leer el concepto de Atomicidad y mas importante, como es su implementacion en SQL Server.

Por ultimo, y esto es a modo de sugerencia dado que pocas veces podemos decidir con que motor de base de datos vamos trabajar, te recomiendo SQL Server 2005, donde (era hora) se implementa el concepto de TRY / CATCH y el parser se encarga de los RAISE, por ejemplo

Código:
begin try
 begin tran
   insert 1
   insert 2
   update 1
   delete 1
 commit tran
end try
begin catch
  rollback tran
end catch
Saludos