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

Problemas con respuesta en Procedimiento

Estas en el tema de Problemas con respuesta en Procedimiento en el foro de SQL Server en Foros del Web. Estimados. Me he encontrado con un problema en el que he podido identificar si el problema es de BD o de la aplicacion.- En la ...
  #1 (permalink)  
Antiguo 17/12/2010, 10:08
 
Fecha de Ingreso: julio-2010
Mensajes: 90
Antigüedad: 13 años, 9 meses
Puntos: 0
Pregunta Problemas con respuesta en Procedimiento

Estimados.

Me he encontrado con un problema en el que he podido identificar si el problema es de BD o de la aplicacion.-


En la ejecucion de un procedimiento de insercion de datos, en donde recivo Folio de Inicio y Folio de fin, el cual devo separar en la base de datos para su insercion...
EJ:

En el folio de inicio recibi "1" y en final recibi "1000", lo que hago es llenar desde el 1 al mil con los datos... 1,2,3,4,5,6, etc...

Tipo.....Folio........Fecha
"1"......... "1"......... "16-12-2010"
....................................
.....................................
........................................

"1" ......... "1000"..... "16-12-2010"


El problema es que el tiempo de espera al momento de ingresarlo por la aplicacion es demaciado... alrededor de 20 segundos... solo para 1000 registros...
si ingresara 10.000 el tiempo de espera seria mucho mayor.

lo que busco, es que aunque la aplicacion me envie 10.000 folios de ingreso, no caduque el tiempo de espera que hay hasta ingresarlos por completos...
pues al momento de caerse la aplicacion por el tiempo de espera, me deja el insert a medio hacer...

Alguna idea respecto a esto ...
De antemano, Gracias a todos.
  #2 (permalink)  
Antiguo 17/12/2010, 11:58
Avatar de Libras
Colaborador
 
Fecha de Ingreso: agosto-2006
Ubicación: En la hermosa perla de occidente
Mensajes: 7.412
Antigüedad: 17 años, 8 meses
Puntos: 774
Respuesta: Problemas con respuesta en Procedimiento

Cual es el codigo de tu procedimiento que regresa estos valores?
  #3 (permalink)  
Antiguo 17/12/2010, 12:01
 
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
  #4 (permalink)  
Antiguo 20/12/2010, 12:39
 
Fecha de Ingreso: julio-2010
Mensajes: 90
Antigüedad: 13 años, 9 meses
Puntos: 0
Respuesta: Problemas con respuesta en Procedimiento

Alguna ayuda?.- o quizas no quedo claro lo que me sucedia :/?

Etiquetas: procedimiento, respuesta
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 09:10.