Duplicacion de registros al insertar
Publicado por Victor Sanchez (4 intervenciones) el 19/08/2008 00:55:15
Alguien sabe pq se duplican 4 registros al insertar en sql server 2000, al ejecutar el sp me inserta 4 registros, lo mas raro es q solo lo hace en algunas ocasiones.
Aqui les dejo el codigo de sp, para ver si alguien puede ayudarme.
CREATE PROCEDURE spMovtoCteFrecuente
@IdCteFrecuente as int OUTPUT,
@Opcion as int,
@Nombre as varchar(50),
@ApellidoPaterno as varchar(50),
@ApellidoMaterno as varchar(50),
@TipoCalle as varchar(50),
@Calle as varchar(100),
@NoOficial as varchar(50),
@NoInterior as varchar(50),
@Orientacion as varchar(50),
@CodigoPostal as varchar(50),
@TipoColonia as varchar(50),
@Telefono as varchar(50),
@TelefonoEmpresa as varchar(50),
@Estado as varchar(50),
@Ciudad as varchar(50),
@Email as varchar(50) = null,
@Empresa as varchar(50),
@FechaNacimiento as varchar(20),
@Suspender as tinyint,
@Colonia as varchar(50),
@IdUser as int,
@Error as int OUTPUT,
@ErrorText as varchar(100) OUTPUT,
@Tarjeta as varchar(12) = NULL OUTPUT
AS
SET NOCOUNT ON
BEGIN TRAN
DECLARE @IdOrientacion as int
DECLARE @IdTipoCalle as int
DECLARE @IdCiudad as int
DECLARE @IdEstado as int
DECLARE @IdTipoColonia as int
DECLARE @IdEmpresaCliente as int
DECLARE @IdColonia as int
SET @Error=0
SET @ErrorText=''
--VALIDACIONES
IF @Opcion<>1 AND @Opcion<>2
BEGIN
SET @Error=-1
SET @ErrorText='La opcion es incorrecta'
GOTO Error
END
IF @Estado=''
BEGIN
SET @Error=-2
SET @ErrorText='El campo del estado esta vacio'
GOTO Error
END
SET @IdEstado=(SELECT IdEstado FROM TCEstados WHERE Nombre like @Estado)
IF @IdEstado IS NULL
BEGIN
SET @Error=-4
SET @ErrorText='El estado no existe'
GOTO Error
END
IF @Ciudad=''
BEGIN
SET @Error=-5
SET @ErrorText='El campo de la ciudad esta vacio'
GOTO Error
END
SET @IdCiudad=(SELECT IdCiudad FROM TCCiudades WHERE Nombre like @Ciudad AND IdEstado=@IdEstado)
IF @IdCiudad IS NULL
BEGIN
SET @Error=-6
SET @ErrorText='La ciudad no existe'
GOTO Error
END
IF @Nombre=''
BEGIN
SET @Error=-7
SET @ErrorText='El nombre esta vacio'
GOTO Error
END
IF @ApellidoPaterno=''
BEGIN
SET @Error=-8
SET @ErrorText='El Apellido Paterno esta vacio'
GOTO Error
END
IF @ApellidoMaterno=''
BEGIN
SET @Error=-9
SET @ErrorText='El Apellido Materno esta vacio'
GOTO Error
END
IF @Calle=''
BEGIN
SET @Error=-10
SET @ErrorText='La Calle esta vacia'
GOTO Error
END
IF @NoOficial=''
BEGIN
SET @Error=-11
SET @ErrorText='El NoOficial esta vacio'
GOTO Error
END
IF @NoInterior=''
BEGIN
SET @Error=-12
SET @ErrorText='El NoInterior esta vacio'
GOTO Error
END
IF @Telefono=''
BEGIN
SET @Error=-13
SET @ErrorText='El Telefono esta vacio'
GOTO Error
END
IF @TelefonoEmpresa=''
BEGIN
SET @Error=-14
SET @ErrorText='El Telefono de la Empresa esta vacio'
GOTO Error
END
IF @FechaNacimiento=''
BEGIN
SET @Error=-15
SET @ErrorText='La Fecha de Nacimiento esta vacia'
GOTO Error
END
IF @TipoCalle=''
BEGIN
SET @Error=-16
SET @ErrorText='El Tipo de Calle esta vacio'
GOTO Error
END
SET @IdTipoCalle=(SELECT IdTipoCalle FROM TCTipoCalle WHERE Descripcion like @TipoCalle)
IF @IdTipoCalle IS NULL
BEGIN
SET @Error=-17
SET @ErrorText='El Tipo de Calle no existe'
GOTO Error
END
IF @Orientacion=''
BEGIN
SET @Error=-18
SET @ErrorText='El campo orientacion esta vacio'
GOTO Error
END
SET @IdOrientacion=(SELECT IdOrientacion FROM TCOrientaciones WHERE Descripcion like @Orientacion)
IF @IdOrientacion IS NULL
BEGIN
SET @Error=-19
SET @ErrorText='La orientacion no existe'
GOTO Error
END
IF @TipoColonia=''
BEGIN
SET @Error=-20
SET @ErrorText='El campo tipo colonia esta vacio'
GOTO Error
END
SET @IdTipoColonia=(SELECT IdTipoColonia FROM TCTipoColonia WHERE Descripcion like @TipoColonia)
IF @IdTipoColonia IS NULL
BEGIN
SET @Error=-21
SET @ErrorText='El tipo de colonia no existe'
GOTO Error
END
IF @Empresa=''
BEGIN
SET @Error=-22
SET @ErrorText='El campo empresa del cliente esta vacio'
GOTO Error
END
SET @IdEmpresaCliente=(SELECT IdEmpresaCliente FROM TblEmpresaCliente WHERE NombreComercial like @Empresa)
IF @IdEmpresaCliente IS NULL
BEGIN
SET @Error=-23
SET @ErrorText='La empresa del cliente no existe'
GOTO Error
END
IF @Colonia=''
BEGIN
SET @Error=-24
SET @ErrorText='El campo de la colonia esta vacio'
GOTO Error
END
SET @IdColonia=(SELECT IdColonia FROM TCColonias WHERE Nombre like @Colonia)
IF @IdColonia IS NULL
BEGIN
SET @Error=-25
SET @ErrorText='La colonia no existe'
GOTO Error
END
IF @CodigoPostal=''
BEGIN
SET @Error=-26
SET @ErrorText='El Codigo Postal esta vacio'
GOTO Error
END
--NUEVO
IF @Opcion=1
BEGIN
INSERT INTO TblClienteFrecuente
VALUES (
@Nombre,
@ApellidoPaterno,
@ApellidoMaterno,
@IdTipoCalle,
@Calle,
@NoOficial,
@NoInterior,
@IdOrientacion,
@CodigoPostal,
@IdTipoColonia,
@IdColonia,
@IdCiudad,
@IdEstado,
@Telefono,
@TelefonoEmpresa,
@FechaNacimiento,
Getdate(),
@IdUser,
0,
0,
0,
@IdEmpresaCliente,
@Email,
''
)
set @IdCteFrecuente=@@identity
SET @Error=@@error
IF @Error<>0
BEGIN
SET @ErrorText='Error al crear los datos'
GOTO Error
END
DECLARE @Grupo1 as varchar(3)
DECLARE @Grupo2 as varchar(6)
DECLARE @Grupo3 as varchar(3)
set @Grupo1=dbo.AgregarCeros(ABS(CAST(NEWID() as binary(6)) % 1000) + 1,3)
set @Grupo2= dbo.AgregarCeros(cast(@IdCteFrecuente as varchar(6)),6)
set @Grupo3=dbo.AgregarCeros(ABS(CAST(NEWID() as binary(6)) % 1000) + 1,3)
set @Tarjeta=@Grupo1+@Grupo2+@Grupo3
UPDATE TblClienteFrecuente SET NoTarjeta=@Tarjeta WHERE IdCteFrecuente=@IdCteFrecuente
SET @Error=@@error
IF @Error<>0
BEGIN
SET @ErrorText='Error al crear la tarjeta'
GOTO Error
END
END
--MODIFICAR
IF @Opcion=2
BEGIN
UPDATE TblClienteFrecuente
SET
Nombre=@Nombre,
ApellidoPaterno=@ApellidoPaterno,
ApellidoMaterno=@ApellidoMaterno,
IdTipoCalle=@IdTipoCalle,
Calle=@Calle,
NoOficial=@NoOficial,
NoInterior=@NoInterior,
IdOrientacion=@IdOrientacion,
CodigoPostal=@CodigoPostal,
IdTipoColonia=@IdTipoColonia,
Telefono=@Telefono,
TelefonoEmpresa=@TelefonoEmpresa,
IdEstado=@IdEstado,
IdCiudad=@IdCiudad,
Email=@Email,
IdEmpresaCliente=@IdEmpresaCliente,
FechaNacimiento=@FechaNacimiento,
Suspender=@Suspender,
IdUsuarioSuspende=@IdUser,
FechaSuspende=Getdate()
WHERE IdCteFrecuente=@IdCteFrecuente
SET @Error=@@error
IF @Error<>0
BEGIN
SET @ErrorText='Error al actualizar los datos'
GOTO Error
END
END
SET NOCOUNT OFF
Error:
IF @Error <> 0
ROLLBACK TRAN
ELSE
COMMIT TRAN
GO
Aqui les dejo el codigo de sp, para ver si alguien puede ayudarme.
CREATE PROCEDURE spMovtoCteFrecuente
@IdCteFrecuente as int OUTPUT,
@Opcion as int,
@Nombre as varchar(50),
@ApellidoPaterno as varchar(50),
@ApellidoMaterno as varchar(50),
@TipoCalle as varchar(50),
@Calle as varchar(100),
@NoOficial as varchar(50),
@NoInterior as varchar(50),
@Orientacion as varchar(50),
@CodigoPostal as varchar(50),
@TipoColonia as varchar(50),
@Telefono as varchar(50),
@TelefonoEmpresa as varchar(50),
@Estado as varchar(50),
@Ciudad as varchar(50),
@Email as varchar(50) = null,
@Empresa as varchar(50),
@FechaNacimiento as varchar(20),
@Suspender as tinyint,
@Colonia as varchar(50),
@IdUser as int,
@Error as int OUTPUT,
@ErrorText as varchar(100) OUTPUT,
@Tarjeta as varchar(12) = NULL OUTPUT
AS
SET NOCOUNT ON
BEGIN TRAN
DECLARE @IdOrientacion as int
DECLARE @IdTipoCalle as int
DECLARE @IdCiudad as int
DECLARE @IdEstado as int
DECLARE @IdTipoColonia as int
DECLARE @IdEmpresaCliente as int
DECLARE @IdColonia as int
SET @Error=0
SET @ErrorText=''
--VALIDACIONES
IF @Opcion<>1 AND @Opcion<>2
BEGIN
SET @Error=-1
SET @ErrorText='La opcion es incorrecta'
GOTO Error
END
IF @Estado=''
BEGIN
SET @Error=-2
SET @ErrorText='El campo del estado esta vacio'
GOTO Error
END
SET @IdEstado=(SELECT IdEstado FROM TCEstados WHERE Nombre like @Estado)
IF @IdEstado IS NULL
BEGIN
SET @Error=-4
SET @ErrorText='El estado no existe'
GOTO Error
END
IF @Ciudad=''
BEGIN
SET @Error=-5
SET @ErrorText='El campo de la ciudad esta vacio'
GOTO Error
END
SET @IdCiudad=(SELECT IdCiudad FROM TCCiudades WHERE Nombre like @Ciudad AND IdEstado=@IdEstado)
IF @IdCiudad IS NULL
BEGIN
SET @Error=-6
SET @ErrorText='La ciudad no existe'
GOTO Error
END
IF @Nombre=''
BEGIN
SET @Error=-7
SET @ErrorText='El nombre esta vacio'
GOTO Error
END
IF @ApellidoPaterno=''
BEGIN
SET @Error=-8
SET @ErrorText='El Apellido Paterno esta vacio'
GOTO Error
END
IF @ApellidoMaterno=''
BEGIN
SET @Error=-9
SET @ErrorText='El Apellido Materno esta vacio'
GOTO Error
END
IF @Calle=''
BEGIN
SET @Error=-10
SET @ErrorText='La Calle esta vacia'
GOTO Error
END
IF @NoOficial=''
BEGIN
SET @Error=-11
SET @ErrorText='El NoOficial esta vacio'
GOTO Error
END
IF @NoInterior=''
BEGIN
SET @Error=-12
SET @ErrorText='El NoInterior esta vacio'
GOTO Error
END
IF @Telefono=''
BEGIN
SET @Error=-13
SET @ErrorText='El Telefono esta vacio'
GOTO Error
END
IF @TelefonoEmpresa=''
BEGIN
SET @Error=-14
SET @ErrorText='El Telefono de la Empresa esta vacio'
GOTO Error
END
IF @FechaNacimiento=''
BEGIN
SET @Error=-15
SET @ErrorText='La Fecha de Nacimiento esta vacia'
GOTO Error
END
IF @TipoCalle=''
BEGIN
SET @Error=-16
SET @ErrorText='El Tipo de Calle esta vacio'
GOTO Error
END
SET @IdTipoCalle=(SELECT IdTipoCalle FROM TCTipoCalle WHERE Descripcion like @TipoCalle)
IF @IdTipoCalle IS NULL
BEGIN
SET @Error=-17
SET @ErrorText='El Tipo de Calle no existe'
GOTO Error
END
IF @Orientacion=''
BEGIN
SET @Error=-18
SET @ErrorText='El campo orientacion esta vacio'
GOTO Error
END
SET @IdOrientacion=(SELECT IdOrientacion FROM TCOrientaciones WHERE Descripcion like @Orientacion)
IF @IdOrientacion IS NULL
BEGIN
SET @Error=-19
SET @ErrorText='La orientacion no existe'
GOTO Error
END
IF @TipoColonia=''
BEGIN
SET @Error=-20
SET @ErrorText='El campo tipo colonia esta vacio'
GOTO Error
END
SET @IdTipoColonia=(SELECT IdTipoColonia FROM TCTipoColonia WHERE Descripcion like @TipoColonia)
IF @IdTipoColonia IS NULL
BEGIN
SET @Error=-21
SET @ErrorText='El tipo de colonia no existe'
GOTO Error
END
IF @Empresa=''
BEGIN
SET @Error=-22
SET @ErrorText='El campo empresa del cliente esta vacio'
GOTO Error
END
SET @IdEmpresaCliente=(SELECT IdEmpresaCliente FROM TblEmpresaCliente WHERE NombreComercial like @Empresa)
IF @IdEmpresaCliente IS NULL
BEGIN
SET @Error=-23
SET @ErrorText='La empresa del cliente no existe'
GOTO Error
END
IF @Colonia=''
BEGIN
SET @Error=-24
SET @ErrorText='El campo de la colonia esta vacio'
GOTO Error
END
SET @IdColonia=(SELECT IdColonia FROM TCColonias WHERE Nombre like @Colonia)
IF @IdColonia IS NULL
BEGIN
SET @Error=-25
SET @ErrorText='La colonia no existe'
GOTO Error
END
IF @CodigoPostal=''
BEGIN
SET @Error=-26
SET @ErrorText='El Codigo Postal esta vacio'
GOTO Error
END
--NUEVO
IF @Opcion=1
BEGIN
INSERT INTO TblClienteFrecuente
VALUES (
@Nombre,
@ApellidoPaterno,
@ApellidoMaterno,
@IdTipoCalle,
@Calle,
@NoOficial,
@NoInterior,
@IdOrientacion,
@CodigoPostal,
@IdTipoColonia,
@IdColonia,
@IdCiudad,
@IdEstado,
@Telefono,
@TelefonoEmpresa,
@FechaNacimiento,
Getdate(),
@IdUser,
0,
0,
0,
@IdEmpresaCliente,
@Email,
''
)
set @IdCteFrecuente=@@identity
SET @Error=@@error
IF @Error<>0
BEGIN
SET @ErrorText='Error al crear los datos'
GOTO Error
END
DECLARE @Grupo1 as varchar(3)
DECLARE @Grupo2 as varchar(6)
DECLARE @Grupo3 as varchar(3)
set @Grupo1=dbo.AgregarCeros(ABS(CAST(NEWID() as binary(6)) % 1000) + 1,3)
set @Grupo2= dbo.AgregarCeros(cast(@IdCteFrecuente as varchar(6)),6)
set @Grupo3=dbo.AgregarCeros(ABS(CAST(NEWID() as binary(6)) % 1000) + 1,3)
set @Tarjeta=@Grupo1+@Grupo2+@Grupo3
UPDATE TblClienteFrecuente SET NoTarjeta=@Tarjeta WHERE IdCteFrecuente=@IdCteFrecuente
SET @Error=@@error
IF @Error<>0
BEGIN
SET @ErrorText='Error al crear la tarjeta'
GOTO Error
END
END
--MODIFICAR
IF @Opcion=2
BEGIN
UPDATE TblClienteFrecuente
SET
Nombre=@Nombre,
ApellidoPaterno=@ApellidoPaterno,
ApellidoMaterno=@ApellidoMaterno,
IdTipoCalle=@IdTipoCalle,
Calle=@Calle,
NoOficial=@NoOficial,
NoInterior=@NoInterior,
IdOrientacion=@IdOrientacion,
CodigoPostal=@CodigoPostal,
IdTipoColonia=@IdTipoColonia,
Telefono=@Telefono,
TelefonoEmpresa=@TelefonoEmpresa,
IdEstado=@IdEstado,
IdCiudad=@IdCiudad,
Email=@Email,
IdEmpresaCliente=@IdEmpresaCliente,
FechaNacimiento=@FechaNacimiento,
Suspender=@Suspender,
IdUsuarioSuspende=@IdUser,
FechaSuspende=Getdate()
WHERE IdCteFrecuente=@IdCteFrecuente
SET @Error=@@error
IF @Error<>0
BEGIN
SET @ErrorText='Error al actualizar los datos'
GOTO Error
END
END
SET NOCOUNT OFF
Error:
IF @Error <> 0
ROLLBACK TRAN
ELSE
COMMIT TRAN
GO
Valora esta pregunta


0