falta una instrucción COMMIT o ROLLBACK TRANSACTION

14/12/2005 - 20:24 por pcosta | Informe spam
Hola a todos, estoy teniendo un problema con un Stored Procedure que llamo
desde una pagina aspx.
El error que devuelve es el siguiente:
"Los datos de cadena o binarios se truncarían.
El recuento de transacciones después de EXECUTE indica que falta una
instrucción COMMIT o ROLLBACK TRANSACTION. Recuento anterior = 1, recuento
actual = 0.
Se terminó la instrucción."

En el stored yo no encuentro nada extraño, si alguien sabe que puede ser
le agradeceria su ayuda.

Stored:
CREATE PROCEDURE Alta_web
@compania smallint,@poliza int,@idCotizacion int,
@apellido nvarchar(30), @nombre nvarchar(30), @direccion nvarchar(50),
@numerodir int, @piso nvarchar(6) ,
@dpto nvarchar(3), @localidad nvarchar(35),
@codpos nvarchar(5), @nro_doc char(11), @provincia smallint ,@telefono
char(9),
@Condicion_Fiscal smallint, @tipo_doc char(4),
@modelo numeric, @cobertura nvarchar(3) , @uso smallint, @motor
nvarchar(20), @chasis nvarchar(20),
@patente nvarchar(6), @año int,
@Caracteristica_Tel char(5),
@Caracterisitica_Cel char(5), @Celular char(14), @Email
char(35),@idcliente int, @marca int, @fecha_inicio smalldatetime,
@idVehiculo int, @idCertificado int,@tarjeta varchar(1100),
@Vencimiento_Tarjeta smalldatetime, @Cod_Seguridad int

AS

set nocount on
BEGIN TRANSACTION

INSERT INTO clientes (Nombre, Apellido, Caracteristica_Tel, Telefono,
Caracterisitica_Cel, Celular, Email, Condicion_Fiscal, Tipo_Doc, Nro_Doc)
VALUES (@nombre, @apellido, @Caracteristica_Tel, @Telefono,
@Caracterisitica_Cel, @Celular, @Email, @Condicion_Fiscal, @Tipo_Doc,
@Nro_Doc)
IF @@ERROR <> 0
BEGIN
ROLLBACK TRANSACTION
RETURN -100
END

set @idcliente= (SELECT MAX(idCliente) AS idCliente FROM Clientes WHERE
(Tipo_Doc = @Tipo_Doc) AND (Nro_Doc = @Nro_Doc))

INSERT INTO Direcciones
(Provincia, CodPos, Localidad, Dpto, Piso, Numero,
Direccion, Tipo_direccion, idCliente)
VALUES (@provincia, @codpos, @localidad, @dpto, @piso, @numerodir,
@direccion, 'facturacion', @idcliente)
IF @@ERROR <> 0
BEGIN
ROLLBACK TRANSACTION
RETURN -100
END

INSERT INTO Vehiculos
(Año, Patente, Chasis, Motor, Tau_codia, Marca,
F_inicio_rodamiento)
VALUES (@año, @patente, @chasis, @motor, @modelo, @marca,
@fecha_inicio)
IF @@ERROR <> 0
BEGIN
ROLLBACK TRANSACTION
RETURN -100
END
set @Poliza= (SELECT Poliza FROM Polizas WHERE idCompania=@compania)

UPDATE Polizas SET Poliza=@Poliza +1 WHERE idCompania=@compania
IF @@ERROR <> 0
BEGIN
ROLLBACK TRANSACTION
RETURN -100
END

INSERT INTO Certificados
(idCliente, F_inicio_cobertura, Compañia,
Cobertura, Uso, idCotizacion, Poliza)
VALUES (@idcliente, @fecha_inicio, @compania, @cobertura,
@uso,@idCotizacion, @poliza)
IF @@ERROR <> 0
BEGIN
ROLLBACK TRANSACTION
RETURN -100
END

set @idCertificado= (SELECT MAX(idCertificado) AS idCertificado FROM
Certificados WHERE (idCliente = @idcliente) AND (F_inicio_cobertura @fecha_inicio))
set @idVehiculo= (SELECT MAX(idVehiculo) AS idVehiculo
FROM Vehiculos
WHERE (Motor = @motor) AND (Chasis = @chasis))


INSERT INTO Flota
(idCertificado, idVehiculo)
VALUES (@idCertificado, @idVehiculo)
IF @@ERROR <> 0
BEGIN
ROLLBACK TRANSACTION
RETURN -100
END

INSERT INTO Formas_de_pago
(idCliente, Numero_tarjeta, F_vencimiento,
Cod_Verificador, Tipo_tarjeta)
VALUES (@idcliente, @tarjeta, @Vencimiento_Tarjeta, @Cod_Seguridad,
1)
IF @@ERROR <> 0
BEGIN
ROLLBACK TRANSACTION
RETURN -100
END
COMMIT TRANSACTION
GO

Nuevamente muchas gracias a todos.

Pablo
 

Leer las respuestas

#1 José Antonio
15/12/2005 - 08:37 | Informe spam
Este error te da porque estas insertando o actualizando una columna en una
tabla en la que el dato que quieres insertar o actualizar es mayor que la
longitud que permite la columna.


"Pablo Costa" escribió en el mensaje
news:
Hola a todos, estoy teniendo un problema con un Stored Procedure que llamo
desde una pagina aspx.
El error que devuelve es el siguiente:
"Los datos de cadena o binarios se truncarían.
El recuento de transacciones después de EXECUTE indica que falta una
instrucción COMMIT o ROLLBACK TRANSACTION. Recuento anterior = 1, recuento
actual = 0.
Se terminó la instrucción."

En el stored yo no encuentro nada extraño, si alguien sabe que puede ser
le agradeceria su ayuda.

Stored:
CREATE PROCEDURE Alta_web
@compania smallint,@poliza int,@idCotizacion int,
@apellido nvarchar(30), @nombre nvarchar(30), @direccion nvarchar(50),
@numerodir int, @piso nvarchar(6) ,
@dpto nvarchar(3), @localidad nvarchar(35),
@codpos nvarchar(5), @nro_doc char(11), @provincia smallint ,@telefono
char(9),
@Condicion_Fiscal smallint, @tipo_doc char(4),
@modelo numeric, @cobertura nvarchar(3) , @uso smallint, @motor
nvarchar(20), @chasis nvarchar(20),
@patente nvarchar(6), @año int,
@Caracteristica_Tel char(5),
@Caracterisitica_Cel char(5), @Celular char(14), @Email
char(35),@idcliente int, @marca int, @fecha_inicio smalldatetime,
@idVehiculo int, @idCertificado int,@tarjeta varchar(1100),
@Vencimiento_Tarjeta smalldatetime, @Cod_Seguridad int

AS

set nocount on
BEGIN TRANSACTION

INSERT INTO clientes (Nombre, Apellido, Caracteristica_Tel, Telefono,
Caracterisitica_Cel, Celular, Email, Condicion_Fiscal, Tipo_Doc, Nro_Doc)
VALUES (@nombre, @apellido, @Caracteristica_Tel, @Telefono,
@Caracterisitica_Cel, @Celular, @Email, @Condicion_Fiscal, @Tipo_Doc,
@Nro_Doc)
IF @@ERROR <> 0
BEGIN
ROLLBACK TRANSACTION
RETURN -100
END

set @idcliente= (SELECT MAX(idCliente) AS idCliente FROM Clientes WHERE
(Tipo_Doc = @Tipo_Doc) AND (Nro_Doc = @Nro_Doc))

INSERT INTO Direcciones
(Provincia, CodPos, Localidad, Dpto, Piso, Numero,
Direccion, Tipo_direccion, idCliente)
VALUES (@provincia, @codpos, @localidad, @dpto, @piso, @numerodir,
@direccion, 'facturacion', @idcliente)
IF @@ERROR <> 0
BEGIN
ROLLBACK TRANSACTION
RETURN -100
END

INSERT INTO Vehiculos
(Año, Patente, Chasis, Motor, Tau_codia, Marca,
F_inicio_rodamiento)
VALUES (@año, @patente, @chasis, @motor, @modelo, @marca,
@fecha_inicio)
IF @@ERROR <> 0
BEGIN
ROLLBACK TRANSACTION
RETURN -100
END
set @Poliza= (SELECT Poliza FROM Polizas WHERE idCompania=@compania)

UPDATE Polizas SET Poliza=@Poliza +1 WHERE idCompania=@compania
IF @@ERROR <> 0
BEGIN
ROLLBACK TRANSACTION
RETURN -100
END

INSERT INTO Certificados
(idCliente, F_inicio_cobertura, Compañia,
Cobertura, Uso, idCotizacion, Poliza)
VALUES (@idcliente, @fecha_inicio, @compania, @cobertura,
@uso,@idCotizacion, @poliza)
IF @@ERROR <> 0
BEGIN
ROLLBACK TRANSACTION
RETURN -100
END

set @idCertificado= (SELECT MAX(idCertificado) AS idCertificado FROM
Certificados WHERE (idCliente = @idcliente) AND (F_inicio_cobertura > @fecha_inicio))
set @idVehiculo= (SELECT MAX(idVehiculo) AS idVehiculo
FROM Vehiculos
WHERE (Motor = @motor) AND (Chasis = @chasis))


INSERT INTO Flota
(idCertificado, idVehiculo)
VALUES (@idCertificado, @idVehiculo)
IF @@ERROR <> 0
BEGIN
ROLLBACK TRANSACTION
RETURN -100
END

INSERT INTO Formas_de_pago
(idCliente, Numero_tarjeta, F_vencimiento,
Cod_Verificador, Tipo_tarjeta)
VALUES (@idcliente, @tarjeta, @Vencimiento_Tarjeta, @Cod_Seguridad,
1)
IF @@ERROR <> 0
BEGIN
ROLLBACK TRANSACTION
RETURN -100
END
COMMIT TRANSACTION
GO

Nuevamente muchas gracias a todos.

Pablo

Preguntas similares