Ver Mensaje Individual
  #3 (permalink)  
Antiguo 17/12/2010, 12:01
Garilax
 
Fecha de Ingreso: julio-2010
Mensajes: 90
Antigüedad: 13 años, 9 meses
Puntos: 0
Respuesta: Problemas con respuesta en Procedimiento

El procedimiento tiene una infinidad de validaciones.-
te los copio.

A mi parecer, no creo que el "while" que separa folio por folio, sea el problema...

Cita:
CREATE PROCEDURE Procedimiento
( @COD_TIPO_GIFTCARD Smallint,
@NUMERO_FOLIO_Inicio Bigint,
@NUMERO_FOLIO_Termino bigint,
@FECHA_CREACION datetime,
@COD_ESTADO smallint,
@MONTO_VENDIDO bigint,
@SALDO bigint,
@FECHA_TERMINO datetime,
@NOMBRE_CLIENTE varchar(100),
@Modificado bit,
@Nuevo_Folio_Inicio bigint,
@Nuevo_Folio_Termino bigint,
@Nuevo_Fecha_Creacion Datetime,
@Nuevo_TIPO_GIFTCARD int
)

AS
Begin
Begin TRY
DECLARE @INACTIVA SMALLINT
DECLARE @CORRELATIVO FLOAT
DECLARE @ERROR_MENSAJE VARCHAR(MAX)
DECLARE @vVALIDA_ULTIMO_FOLIO FLOAT
DECLARE @TRUE BIT
DECLARE @TIPO_PAGO_GIFTCARD INTEGER
Declare @Retorna int
SET @TRUE = 1
SET @INACTIVA = 3
SET @TIPO_PAGO_GIFTCARD = 3
Set @Retorna=0



If(@Modificado!=@TRUE)
Begin
If Exists( SELECT 1
FROM MAE_GIFTCARDS
WHERE COD_TIPO_GIFTCARD = @COD_TIPO_GIFTCARD And Numero_Folio between @NUMERO_FOLIO_Inicio and @NUMERO_FOLIO_Termino
)
Begin

SET @ERROR_MENSAJE = 'ERROR!, EL FOLIO QUE DESEA INGRESAR, YA SE ENCUENTRA '
RAISERROR (@ERROR_MENSAJE, 16, 1)

End
Else
Begin
If (@NUMERO_FOLIO_TERMINO < @NUMERO_FOLIO_INICIO)
BEGIN
SET @ERROR_MENSAJE = 'ERROR!, EL FOLIO DE INICIO NO PUEDE SER MAYOR AL FOLIO FINAL '
RAISERROR (@ERROR_MENSAJE, 16, 1)
End
WHILE @NUMERO_FOLIO_INICIO <= @NUMERO_FOLIO_TERMINO
BEGIN

INSERT INTO MAE_GIFTCARDS
(COD_TIPO_GIFTCARD
,NUMERO_FOLIO
,FECHA_CREACION
,COD_ESTADO
,MONTO_VENDIDO
,SALDO
,FECHA_TERMINO
,NOMBRE_CLIENTE)
VALUES
(@COD_TIPO_GIFTCARD
,@NUMERO_FOLIO_INICIO
,@FECHA_CREACION
,@INACTIVA
,@MONTO_VENDIDO
,@MONTO_VENDIDO
,@FECHA_TERMINO
,@NOMBRE_CLIENTE)
SET @NUMERO_FOLIO_INICIO = @NUMERO_FOLIO_INICIO + 1
Set @Retorna=1
End--While

End--Else Exists
ENd--If Modificado
Else-- PARA MODIFICAR
Begin
If Exists (Select 1 from mae_giftcards
where cod_estado!=3 and Numero_Folio between @Numero_Folio_Inicio and @Numero_Folio_Termino and cod_tipo_giftcard=@COD_TIPO_GIFTCARD)
Begin
SET @ERROR_MENSAJE = 'ERROR!, ALGUNOS FOLIOS YA HAN SIDO UTILIZADOS '
RAISERROR (@ERROR_MENSAJE, 16, 1)
End

Else
Begin


IF EXISTS ( SELECT 1
FROM DET_FORMA_PAGO_DOCUMENTO
WHERE NUMERO_TARJETA_FORMA_PAGO BETWEEN @NUEVO_FOLIO_INICIO AND @NUEVO_FOLIO_TERMINO
AND COD_TIPO_FORMA_PAGO = @TIPO_PAGO_GIFTCARD)
BEGIN
SET @ERROR_MENSAJE = 'ERROR!, ALGUNOS FOLIOS YA HAN SIDO UTILIZADOS '
RAISERROR (@ERROR_MENSAJE, 16, 1)
END
Else

Begin
If (@Nuevo_Folio_Inicio > @Nuevo_Folio_TERMINO)
BEGIN
SET @ERROR_MENSAJE = 'ERROR!, EL FOLIO DE INICIO NO PUEDE SER MAYOR AL FOLIO FINAL '
RAISERROR (@ERROR_MENSAJE, 16, 1)
End
Else
Begin
If Exists (Select 1 from mae_giftcards
where cod_estado!=3 and Numero_Folio between @Nuevo_Folio_Inicio and @Nuevo_Folio_Termino and cod_tipo_giftcard=@Nuevo_TIPO_GIFTCARD)
Begin
SET @ERROR_MENSAJE = 'ERROR!, ALGUNOS FOLIOS YA HAN SIDO UTILIZADOS '
RAISERROR (@ERROR_MENSAJE, 16, 1)
End
Else

Begin

Delete mae_giftcards
where Numero_Folio between @NUMERO_FOLIO_Inicio and @NUMERO_FOLIO_Termino
and Cod_Tipo_Giftcard=@Cod_TIPO_GIFTCARD
if exists( select 1 from mae_giftcards where Numero_Folio between @Nuevo_Folio_Inicio and @Nuevo_Folio_Termino
--And Cod_tipo_Giftcard=@Cod_TIPO_GIFTCARD
And Cod_tipo_Giftcard=@Nuevo_TIPO_GIFTCARD
)
Begin
SET @ERROR_MENSAJE = 'ERROR!, EL FOLIO QUE DESEA INGRESAR, YA SE ENCUENTRA '
RAISERROR (@ERROR_MENSAJE, 16, 1)
End
Else
BEgin
WHILE @Nuevo_Folio_Inicio <= @Nuevo_Folio_Termino
BEGIN

INSERT INTO MAE_GIFTCARDS
(COD_TIPO_GIFTCARD
,NUMERO_FOLIO
,FECHA_CREACION
,COD_ESTADO
,MONTO_VENDIDO
,SALDO
,FECHA_TERMINO
,NOMBRE_CLIENTE)
VALUES
(@Nuevo_TIPO_GIFTCARD
,@Nuevo_Folio_Inicio
,@Nuevo_Fecha_Creacion
,@INACTIVA
,@MONTO_VENDIDO
,@MONTO_VENDIDO
,@FECHA_TERMINO
,@NOMBRE_CLIENTE)
SET @Nuevo_Folio_Inicio = @Nuevo_Folio_Inicio + 1
Set @Retorna=1
End--While
End
End
End

End--If Exists
End

End--Else

Select @Retorna

END TRY
BEGIN CATCH
DECLARE @ErrorMessage NVARCHAR(4000);
DECLARE @ErrorSeverity INT;
DECLARE @ErrorState INT;
DECLARE @DBID INT
DECLARE @DBNAME NVARCHAR(128)

SELECT @ErrorMessage = ERROR_MESSAGE(),
@ErrorSeverity = ERROR_SEVERITY(),
@ErrorState = ERROR_STATE(),
@DBID = DB_ID(),
@DBNAME = DB_NAME()

RAISERROR (@ErrorMessage, -- Message text.
@ErrorSeverity, -- Severity.
@ErrorState -- State.
,@DBID,
@DBNAME);
END CATCH


End