Hola gente del foro, estaba teniendo un inconveniente cuando trabajo con
cursores para luego insertar esos datos en una tabla.
El problema es el siguiente, cuando ejecuto el script que realiza el insert
en una tabla vacia generalmente tarda unos segundos, pero bajo las mismas
condiciones (en maquina local, sin ningun usuario conectado, insert sobre
una tabla vacia) suele tardar varios minutos.
el cursor recorre unos 10000 o 20000 registros y luego los inserta en otra
tabla, pero hay veces que tarda mucho, mucho más que otras veces... esto se
puede deber a alguna configuración, como ser la base tempdb o la utilización
de la memoria o algo por el estilo, espero que me puedan guiar para ver el
motivo de este comportamiento, El codigo que utilizo por las dudas es el
siguiente:
DECLARE @_comp INT
DECLARE @_cont INT
DECLARE @_tcomp VARCHAR(2)
DECLARE @_femi DATETIME
DECLARE @_fven DATETIME
DECLARE @CANT INT
DECLARE @TOTAL INT
SET NOCOUNT ON
SET @TOTAL = 0
DECLARE lista CURSOR FOR
SELECT tipo_de_comprobante, numero_de_comprobante, codigo_de_contrato,
fecha_de_emision, fecha_de_vencimiento
FROM datcom
WHERE idusuario = 50
AND codigo_de_contrato <> 0
OPEN lista
FETCH lista INTO @_tcomp, @_comp, @_cont, @_femi, @_fven
WHILE @@fetch_status=0
BEGIN
INSERT INTO Fact_Cab (emp_codigo, suc_codigo, cte_tipo, fac_letra,
fac_numero, cont_numero, fac_fecha, fec_vto, total_cte_neto,
nro_recibo_merc, nro_recibo_iva, fac_facturado, mas_ingreso, mas_asiento,
nd_comp_comision, nd_vend_comision, cont_cerrado, total_iva_merc,
total_iva_otros, fac_fij_item, fac_detalle_modelo, total_neto_gravado,
total_neto_gravado_2, iva_porc, iva_porc_2, fac_cai, fac_cai_vto,
fac_barras, fac_pad_clie)
SELECT
emp_codigo = 6,
suc_codigo = 1,
cte_tipo = CASE @_tcomp
WHEN 'BD' THEN 28
WHEN 'BP' THEN 27
WHEN 'CR' THEN 32
WHEN 'CV' THEN 17
WHEN 'DC' THEN 14
ELSE ' '
END,
fac_letra = 'A',
fac_numero = @_comp,
cont_numero = @_cont,
fac_fecha = @_femi,
fec_vto = @_fven,
total_cte_neto = 0,
nro_recibo_merc = 0,
nro_recibo_iva = 0,
fac_facturado = NULL,
mas_ingreso = @_fven,
mas_asiento = 0,
nd_comp_comision = 0,
nd_vend_comision = 0,
cont_cerrado = NULL,
total_iva_merc = 0,
total_iva_otros = 0,
fac_fij_item = 0,
fac_detalle_modelo = NULL,
total_neto_gravado = 0,
total_neto_gravado_2 = 0,
iva_porc = 0,
iva_porc_2 = 0,
fac_cai = NULL,
fac_cai_vto = NULL,
fac_barras = NULL,
fac_pad_clie = 0
FETCH lista INTO @_tcomp, @_comp, @_cont, @_femi, @_fven
END
CLOSE Lista
DEALLOCATE Lista
print @TOTAL
SET NOCOUNT OFF
Muchas gracias desde ya,
Saludos
Hernan Rocca
Leer las respuestas