Problema con transacciones (Open y close transaction)

05/12/2006 - 11:06 por Jesus Suarez | Informe spam
Hola a todos se me produce el siguente error al trabajar con transacciones
en mi stored procedured

Msg 3903, Level 16, State 1, Procedure USP_MNT_SISTEMAS_MIGRACION_EMPRESAS,
Line 53
The ROLLBACK TRANSACTION request has no corresponding BEGIN TRANSACTION.

El procedimiento es el siguiente:

BEGIN TRY
BEGIN TRAN
DECLARE cursor1 CURSOR for SELECT A.IDEMPRESA, A.CODEMPRESA, A.CONTRASENA
FROM SISTEMAS_PORTAL_EMPLEO.DBO.TBLEMPRESAS A WHERE WEBORIGEN = @WEBORIGEN
AND A.IDEMPRESA > @ID_EMPRESA
OPEN cursor1
FETCH NEXT FROM cursor1 INTO @IDEMPRESA, @COEMPRESA, @PASSWORD
WHILE @@FETCH_STATUS = 0
BEGIN
INSERT INTO SISTEMAS_TD_USUARIOS(EMAIL,PASSWORD,IDROL,ACTIVO)
VALUES (@COEMPRESA,@PASSWORD,2,1)

PRINT 'USUARIO: ' + @COEMPRESA + ' HA SIDO INSERTADO EN TD_USUARIOS'

SELECT @ID = SCOPE_IDENTITY()
INSERT INTO SISTEMAS_TD_MIGRACION_EMPRESAS (IDPORTAL,IDEMPRESA)
VALUES (@IDEMPRESA,@ID)

INSERT INTO SISTEMAS_TD_EMPRESAS
(idusuario,razonSocial,
logo,idperfilProfesional,CIF,
nombreEmpresa,idFormaJuridica,
direccion,localidad,idProvincia,
numTrabajadores,URL,descripcionEmpresa,
idTipoEmpresa,stamp,otros)
SELECT B.IDEMPRESA,razonSocial,
logo,null,CIF,
nombreEmpresa,idFormaJuridica,
direccion,localidad,idProvincia,
numTrabajadores,URL,descripcionEmpresa,
idTipoEmpresa,stamp,otros
FROM SISTEMAS_PORTAL_EMPLEO.DBO.TBLEMPRESAS A,
SISTEMAS_TD_MIGRACION_EMPRESAS B
WHERE A.IDEMPRESA = @IDEMPRESA AND A.IDEMPRESA = B.IDPORTAL

PRINT 'USUARIO: ' + @COEMPRESA + ' HA SIDO INSERTADO EN TD_EMPRESAS'

FETCH NEXT FROM cursor1 INTO @IDEMPRESA,@COEMPRESA, @PASSWORD
COMMIT TRAN
END
close cursor1
deallocate cursor1
END TRY

BEGIN CATCH
ROLLBACK TRAN
DECLARE @ERR VARCHAR(8000)
SELECT @ERR = TEXT FROM SYS.MESSAGES
close cursor1
deallocate cursor1
RETURN
END CATCH


que puede estar ocurriendo
 

Leer las respuestas

#1 Maxi
05/12/2006 - 13:14 | Informe spam
Hola Jesus, antyes que nada comentarte que los cursores no son buenos para
SQLserver (no me he puesto a analizar el codigo como para transformar ese
cursor en una sentencia de conjunto de objetos)

La pregunta es: que pasa si el error sucede luego del commit?

COMMIT TRAN
END
close cursor1
deallocate cursor1
END TRY



Yo en tu caso sacaria primero el rollback y veria el mensaje de error donde
se esta sucediendo

Salu2

Microsoft MVP SQL Server
Culminis Speaker
INETA Speaker

"Jesus Suarez" escribió en el mensaje
news:%
Hola a todos se me produce el siguente error al trabajar con transacciones
en mi stored procedured

Msg 3903, Level 16, State 1, Procedure
USP_MNT_SISTEMAS_MIGRACION_EMPRESAS, Line 53
The ROLLBACK TRANSACTION request has no corresponding BEGIN TRANSACTION.

El procedimiento es el siguiente:

BEGIN TRY
BEGIN TRAN
DECLARE cursor1 CURSOR for SELECT A.IDEMPRESA, A.CODEMPRESA, A.CONTRASENA
FROM SISTEMAS_PORTAL_EMPLEO.DBO.TBLEMPRESAS A WHERE WEBORIGEN = @WEBORIGEN
AND A.IDEMPRESA > @ID_EMPRESA
OPEN cursor1
FETCH NEXT FROM cursor1 INTO @IDEMPRESA, @COEMPRESA, @PASSWORD
WHILE @@FETCH_STATUS = 0
BEGIN
INSERT INTO SISTEMAS_TD_USUARIOS(EMAIL,PASSWORD,IDROL,ACTIVO)
VALUES (@COEMPRESA,@PASSWORD,2,1)

PRINT 'USUARIO: ' + @COEMPRESA + ' HA SIDO INSERTADO EN TD_USUARIOS'

SELECT @ID = SCOPE_IDENTITY()
INSERT INTO SISTEMAS_TD_MIGRACION_EMPRESAS (IDPORTAL,IDEMPRESA)
VALUES (@IDEMPRESA,@ID)

INSERT INTO SISTEMAS_TD_EMPRESAS
(idusuario,razonSocial,
logo,idperfilProfesional,CIF,
nombreEmpresa,idFormaJuridica,
direccion,localidad,idProvincia,
numTrabajadores,URL,descripcionEmpresa,
idTipoEmpresa,stamp,otros)
SELECT B.IDEMPRESA,razonSocial,
logo,null,CIF,
nombreEmpresa,idFormaJuridica,
direccion,localidad,idProvincia,
numTrabajadores,URL,descripcionEmpresa,
idTipoEmpresa,stamp,otros
FROM SISTEMAS_PORTAL_EMPLEO.DBO.TBLEMPRESAS A,
SISTEMAS_TD_MIGRACION_EMPRESAS B
WHERE A.IDEMPRESA = @IDEMPRESA AND A.IDEMPRESA = B.IDPORTAL

PRINT 'USUARIO: ' + @COEMPRESA + ' HA SIDO INSERTADO EN TD_EMPRESAS'

FETCH NEXT FROM cursor1 INTO @IDEMPRESA,@COEMPRESA, @PASSWORD
COMMIT TRAN
END
close cursor1
deallocate cursor1
END TRY

BEGIN CATCH
ROLLBACK TRAN
DECLARE @ERR VARCHAR(8000)
SELECT @ERR = TEXT FROM SYS.MESSAGES
close cursor1
deallocate cursor1
RETURN
END CATCH


que puede estar ocurriendo

Preguntas similares