Foros del Web » Programación para mayores de 30 ;) » Bases de Datos General » SQL Server »

Error raron en transaccion

Estas en el tema de Error raron en transaccion en el foro de SQL Server en Foros del Web. Hola, me sale este error: Transaction count after EXECUTE indicates that a COMMIT or ROLLBACK TRANSACTION statement is missing. Previous count = 2, current count ...
  #1 (permalink)  
Antiguo 30/09/2006, 18:19
Avatar de Developer9
(Desactivado)
 
Fecha de Ingreso: abril-2005
Ubicación: Mi Ecuador del alma
Mensajes: 4.196
Antigüedad: 19 años
Puntos: 47
Error raron en transaccion

Hola, me sale este error:

Transaction count after EXECUTE indicates that a COMMIT or ROLLBACK TRANSACTION statement is missing. Previous count = 2, current count = 3.

la cosa es que tengo el siguiente codigo

BEGIN TRAN

INSERT INTO .... --tabla maestra

While @x <= @NFilas
Begin

INSERT INTO ... --tabla detalle

IF (@@error <> 0)
BEGIN
ROLLBACK TRAN
RETURN
END

COMMIT TRAN
RETURN

Y por cosas de la vida tengo un error en el insert del detalle que ya lo identifiqué... al ejecutar el procedimiento (sin arreglar el error) si se inserta el registro en la cabecera y luego de eso me sale el error y supongo que debe de ejecutarse el roll back pero al hacer el select de la tabla detalle el registro si está allí, aunque no se hizo el commit
  #2 (permalink)  
Antiguo 02/10/2006, 07:39
Avatar de Andres95
Colaborador
 
Fecha de Ingreso: diciembre-2004
Mensajes: 1.802
Antigüedad: 19 años, 4 meses
Puntos: 38
donde termina el while??
__________________
La sencillez y naturalidad son el supremo y último fin de la cultura...
--
MCTS : SQL Server 2008, .NET Framework 3.5, ASP.NET Applications.
  #3 (permalink)  
Antiguo 02/10/2006, 08:35
Avatar de Developer9
(Desactivado)
 
Fecha de Ingreso: abril-2005
Ubicación: Mi Ecuador del alma
Mensajes: 4.196
Antigüedad: 19 años
Puntos: 47
Cierto, eso me faltó... aqui va otra vez el codigo completo

Código:
BEGIN TRAN

INSERT INTO ....    --tabla maestra

IF (@@error <> 0)
BEGIN
   ROLLBACK TRAN
   RETURN
END

While @x <= @NFilas
Begin

     INSERT INTO ...     --tabla detalle

     IF (@@error <> 0)
     BEGIN
          ROLLBACK TRAN
          RETURN
     END

     set @x=@x+1
End

COMMIT TRAN 
RETURN
Ya

Última edición por Developer9; 02/10/2006 a las 09:10 Razón: Codigo Incompleto
  #4 (permalink)  
Antiguo 02/10/2006, 08:53
Avatar de Andres95
Colaborador
 
Fecha de Ingreso: diciembre-2004
Mensajes: 1.802
Antigüedad: 19 años, 4 meses
Puntos: 38
oye y en donde mas inicias transacciones??
es un sp anidado??
porque te dice que antes de ejecutarlo habia dos transacciones y despues que salio hay tres...
__________________
La sencillez y naturalidad son el supremo y último fin de la cultura...
--
MCTS : SQL Server 2008, .NET Framework 3.5, ASP.NET Applications.
  #5 (permalink)  
Antiguo 02/10/2006, 08:58
Avatar de Andres95
Colaborador
 
Fecha de Ingreso: diciembre-2004
Mensajes: 1.802
Antigüedad: 19 años, 4 meses
Puntos: 38
una pregunta... el error se presenta en el insert o en alguna otra parte del sp...??
__________________
La sencillez y naturalidad son el supremo y último fin de la cultura...
--
MCTS : SQL Server 2008, .NET Framework 3.5, ASP.NET Applications.
  #6 (permalink)  
Antiguo 02/10/2006, 09:28
Avatar de Developer9
(Desactivado)
 
Fecha de Ingreso: abril-2005
Ubicación: Mi Ecuador del alma
Mensajes: 4.196
Antigüedad: 19 años
Puntos: 47
Disculpa, edité el mensaje para poner el codigo completo. Lo que añadi fue:

IF (@@error <> 0)
BEGIN
ROLLBACK TRAN
RETURN
END

luego del insert en la tabla cabecera.

Ejecutando el procedimiento en el analizador de consultas me dice 1 row affected (el insert de la cabecera) y luego me salía un error en el insert de la primera row del detalle (como es detalle hay muchos registros, por ello el while), y luego me salia el error que os comento.

El error en el insert del detalle ya lo identifiqué y lo corregí, y volví a ejecutar el procedimiento y no hay errores, y le hice un select a las tablas para verificar los insert y me he di cuenta que el insert en latabla de la cabecera (de la ejecución anterior, la que tenía el error) si se hizo a pesar de que se tuvo que haber hecho roll back; entonces modifiqué el procedimiento para dejarlo como antes (con el error) lo volví a ejecutar y nuevamente se inserta en la cabecera, me sale el error en el insert del detalle y me sale el error raro que comento y al hacer el select a la tabla cabecera el registro insertado si está

Contestando tus preguntas:
Hago un solo BEGIN TRAN
No es un sp anidado, lo ejecuto una sola vezz
El error se me presenta en el insert del detalle.
  #7 (permalink)  
Antiguo 02/10/2006, 10:41
Avatar de Andres95
Colaborador
 
Fecha de Ingreso: diciembre-2004
Mensajes: 1.802
Antigüedad: 19 años, 4 meses
Puntos: 38
bueno pues parece que no esta entrando ni por el rollback ni por el commit porque deja la transaccion pendiente... por eso hay mas cuando sales que cuando entras al sp...
seria bueno ponerle un print para saber por donde se va...
__________________
La sencillez y naturalidad son el supremo y último fin de la cultura...
--
MCTS : SQL Server 2008, .NET Framework 3.5, ASP.NET Applications.
  #8 (permalink)  
Antiguo 02/10/2006, 11:43
Avatar de Developer9
(Desactivado)
 
Fecha de Ingreso: abril-2005
Ubicación: Mi Ecuador del alma
Mensajes: 4.196
Antigüedad: 19 años
Puntos: 47
Le estaba poniendo print a cada cosa y cierto es que no se hace el rollback, no se si algo tendrá que ver el tipo de error que se genera, no puse los por menores del procedimiento ya que no me parecían relevantes. al inicio creo una tabla temportal:

Código:
create table #Temp_Carga_Familiar(				
	IdAspirante int,
	IdCarga int identity,	IDTipocarga int,	NombreCompleto nvarchar(100),
	FecNacimiento datetime,	Ocupacion int,				
	IntEstudia int,			Costo money,
	IntTrabaja int,			Sueldo money,
	anoTrabaja int,			Religion int
			
)
luego la lleno con datos de un xml que le llega como parametro al procedure, y el codigo del insert del detalle es:

Código:
INSERT INTO sige_aspirantes..asp_cargas
(	
	IdAspirante,		IdCarga,			IDTipocarga,	
	NombreCompleto,		FecNacimiento,
	Ocupacion,			IntEstudia,
	Costo,				IntTrabaja,
	Sueldo,				anoTrabaja,		Religion

)
 select
	@PO_IdAspirante,	IdCarga,		IDTipocarga,
	NombreCompleto,		FecNacimiento,
	Ocupacion,			IntEstudia,
	Costo,				IntTrabaja,
	Sueldo,			anoTrabaja,			Religion		
FROM #Temp_Carga_Familia
WHERE @x= #Temp_Carga_Familiar.IdCarga
Donde el nombre de la tabla temporal está incorrecto.

Despues de cada instruccion ROLLBACK TRAN le puse un print y de la misma manera despues del COMMIT TRANS, y al ejecutar el procedimiento no se muestra nada.

Entonces, porque este tipo de error no hace que el procedimiento se valla por el rollback respectivo
  #9 (permalink)  
Antiguo 02/10/2006, 11:56
Avatar de Andres95
Colaborador
 
Fecha de Ingreso: diciembre-2004
Mensajes: 1.802
Antigüedad: 19 años, 4 meses
Puntos: 38
supongo que porque no es error de la operacion, sino que es una referencia a un objeto que no existe...
__________________
La sencillez y naturalidad son el supremo y último fin de la cultura...
--
MCTS : SQL Server 2008, .NET Framework 3.5, ASP.NET Applications.
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 22:38.