Google Groups no longer supports new Usenet posts or subscriptions. Historical content remains viewable.
Dismiss

Re: Insisto nuevamente - No hay solucion -SP MODIFICADO

3 views
Skip to first unread message

Dany

unread,
Dec 18, 2009, 6:00:29 PM12/18/09
to
Probaste si desde mismo SQL Management en la Oficina Remota tienes el
mismo problema???


On 18/12/2009 04:50 p.m., Luis Mata wrote:
> Cambios realizados:
>
> ALTER proc [dbo].[meta_total_vendedor] @panio char(4), @pmes char(2)
> as
> declare @notc char(1)
> set @notc = 'N'
> --Inserto los dias del mes
> SET LANGUAGE Spanish
> --convirtiendo a fecha
> declare @fechagen datetime,@fechatest datetime,@diastest int, @dias4m int
> if cast(@panio as int)!=year(getdate()) or cast(@pmes as
> int)!=month(getdate())
> begin
> set @fechatest = cast(@panio+'-01'+'-'+@pmes as datetime)
> set @diastest = DAY(DATEADD(DAY, -1, CONVERT(VARCHAR(6), DATEADD(MONTH, 1,
> @fechatest), 112) + '01'))
> set @fechagen = cast(@panio+'-'+cast(@diastest as char(2))+'-'+@pmes as
> datetime)
> end
> else
> begin
> set @fechagen = getdate()
> end
> --Variables
> declare @anio int,@mes int
> set @anio = YEAR(@fechagen)
> set @mes = MONTH(@fechagen)
> declare @dinicial datetime, @numdias int, @diaactual int, @diareal
> decimal(12,4)
> declare @ejecuta varchar(7500), @vnomven varchar(20)
> set @dinicial = @fechagen-(day(@fechagen)-1)
> set @numdias = DAY(DATEADD(DAY, -1, CONVERT(VARCHAR(6), DATEADD(MONTH, 1,
> @fechagen), 112) + '01'))
> set @dias4m = @numdias -4
> set @diaactual = day(@fechagen)
> set @diareal = (cast(@diaactual as decimal(12,4))/cast(@numdias as
> decimal(12,4)))*(cast(@numdias as decimal(12,4))-4)
> --creo la tabla
> create table #tabmmetas(ID int not null default 0,c1 varchar(90) not null
> default space(0),c2 varchar(60)not null default space(0),c3
> varchar(60),metatotal decimal(12,2) not null default 0)
> insert into #tabmmetas values(1,'Dia Actual (para calc: '+cast(@diareal as
> nvarchar(15))+')',cast(@diaactual as varchar(2)),'Hoy',0)
> insert into #tabmmetas values(2,'Cuota del Mes','','',0)
> insert into #tabmmetas values(3,'Cuota
> Diaria',ltrim(str(@dias4m)),'Dias',0)
> insert into #tabmmetas values(4,'Acumulado al Dia de HOY','','',0)
> insert into #tabmmetas values(5,'Como deberia Ir S/.','','',0)
> insert into #tabmmetas values(6,'Acumulado a la Fecha En %','','',0)
> insert into #tabmmetas values(7,'Como deberia Ir En %','','',0)
> insert into #tabmmetas values(8,'Diferencia','','',0)
> insert into #tabmmetas values(9,'Acum. vs Como deberia ir En %','','',0)
> declare @contar int,@metames decimal(12,2),@metatienda decimal(12,2)
> declare @namebd varchar(5),@metaahora decimal(12,2)
> set @namebd = (SELECT DB_NAME() AS [Current Database])
> set @ejecuta = 'declare sacameta cursor for select '+@namebd+' from
> maestro.dbo.tabtmetas where anio='+@panio+' and mes='+@pmes
> exec (@ejecuta)
> open sacameta
> fetch next from sacameta into @metames
> set @metatienda = @metames
> deallocate sacameta
> set @metaahora = @metames/(@numdias-4)
> update #tabmmetas set metatotal=cast(@metames as nvarchar) where id = 2
> set @ejecuta = 'update #tabmmetas set metatotal='+cast(@metames/@dias4m as
> nvarchar)+' where id = 3'
> exec (@ejecuta)
> set @ejecuta = 'update #tabmmetas set
> metatotal='+cast((@metames/@dias4m)*@diareal as nvarchar)+' where id =
> 5'---@numdias-4
> exec (@ejecuta)
> if @metames!=0
> begin
> set @ejecuta = 'update #tabmmetas set
> metatotal='+cast((((@metaahora*@diareal)/@metames)*100) as nvarchar)+'
> where
> id = 7'
> end
> exec (@ejecuta)
> set @contar = 0
> declare curbd cursor for SELECT VENDEDOR FROM ARCHTRA1 WHERE
> year(fecha)=@anio and month(fecha)=@mes and tot_sol!=0 group by vendedor
> union
> SELECT VENDEDOR FROM devolu WHERE year(fecha)=@anio and
> month(fecha)=@mes and tot_sol!=0 group by vendedor
> UNION
> SELECT VENDEDOR FROM NOTA_DEB WHERE year(fecha)=@anio and
> month(fecha)=@mes and tot_sol!=0 group by vendedor ORDER BY VENDEDOR
> open curbd
> fetch next from curbd into @vnomven
> while @@fetch_status = 0
> begin
> set @ejecuta = 'alter table #tabmmetas add '+LOWER(rtrim(@vnomven))+'
> decimal(12,2) default 0 not null'
> exec (@ejecuta)
> set @metames = (select meta from tabmetavend where anio=@anio and mes =
> @mes and vendedor=rtrim(@vnomven))
> set @ejecuta = 'update #tabmmetas set
> '+lower(rtrim(@vnomven))+'='+cast(@metames as nvarchar)+' where id = 2'
> exec (@ejecuta)
> if @metames != 0
> begin
> set @ejecuta = 'update #tabmmetas set
> '+lower(rtrim(@vnomven))+'='+cast(@metames/@dias4m as nvarchar)+' where
> id =
> 3'
> exec (@ejecuta)
> set @ejecuta = 'update #tabmmetas set
> '+lower(rtrim(@vnomven))+'='+cast((@metames/(@dias4m))*(@diareal) as
> nvarchar)+' where id = 5'
> exec (@ejecuta)
> if @metames!=0
> begin
> set @ejecuta = 'update #tabmmetas set
> '+lower(rtrim(@vnomven))+'='+cast((((@metames/@dias4m)*@diareal)/@metames)*100
>
> as nvarchar)+' where id = 7'
> exec (@ejecuta)
> end
> end
> fetch next from curbd into @vnomven
> end
> ----cambio a spanish
> declare @vtatotal decimal(12,2),@nctotal decimal(12,2),@ndtotal
> decimal(12,2),@totfinal decimal(12,2),@varmeta decimal(12,2), @varacumula
> decimal(12,2)
> DECLARE @valor int
> close curbd
> set @valor = 0
> while @valor <= (@numdias)-1
> begin
> set @valor = @valor + 1
> insert into #tabmmetas(id,c2,c3) values(@valor+10,datename(weekday,
> dateadd(d,@valor,@dinicial)),convert(char(6),dateadd(d,@valor,@dinicial),113))
>
> open curbd
> fetch next from curbd into @vnomven
> while @@fetch_status = 0
> begin
> declare @unisol decimal(12,4), @bsol decimal(12,2), @dsol decimal(12,4),
> @neto decimal(15,6), @igv decimal(12,2), @bruto decimal(12,2),
> @total decimal(12,5), @ntotal decimal(12,5)
> set @total = 0
> set @ntotal = 0
> declare miventa cursor for select codarticul, precioprod, cantidad,
> descuento,proveedor from archtra3 where year(fecha)=@anio and
> month(fecha)=@mes
> and day(fecha)=@valor and vendedor=rtrim(@vnomven)
> union all
> select codarticul, precioprod * -1, cantidad, descuento,proveedor from
> devo_pro where year(fecha)=@anio and month(fecha)=@mes
> and day(fecha)=@valor and vendedor=rtrim(@vnomven)
> union all
> select codarticul, precioprod, cantidad, descuento,proveedor from notapro
> where year(fecha)=@anio and month(fecha)=@mes
> and day(fecha)=@valor and vendedor=+rtrim(@vnomven) order by codarticul
>
> declare @codigo varchar(13), @precio decimal(12,4), @cant decimal(12,4),
> @dscto decimal(12,2),@prov char(6),@excluye int,@nosuma int
> open miventa
> fetch next from miventa into @codigo,@precio, @cant, @dscto,@prov
> while @@fetch_status = 0
> begin
> if @prov = 'ZZZ002' OR @prov = 'SUM001' OR @prov = 'ZZZ004' OR @prov =
> 'ZZ003'
> BEGIN
> set @excluye = (select count(*) from maestro.dbo.taberrnocont where
> codigo=@codigo)
> if @excluye =0
> begin
> set @unisol = @precio
> set @bsol = round(@unisol * (case @cant when 0 then 1 else @cant
> end),2)
> set @dsol = round(@bsol * (@dscto/100),4)
> set @neto = @bsol - @dsol
> set @igv = round(@neto * 0.19,2)
> set @bruto = round(@neto + @igv,2)
> set @ntotal = @ntotal + round(@bruto / 1.19,2)
> end
> END
> set @unisol = @precio
> set @bsol = round(@unisol * (case @cant when 0 then 1 else @cant end),2)
> set @dsol = round(@bsol * (@dscto/100),4)
> set @neto = @bsol - @dsol
> set @igv = round(@neto * 0.19,2)
> set @bruto = round(@neto + @igv,2)
> set @total = @total + round(@bruto / 1.19,2)
> fetch next from miventa into @codigo,@precio, @cant, @dscto,@prov
> end
> deallocate miventa
> PRINT rtrim(@vnomven) + cast(@total as nvarchar)+' '+ cast(@ntotal as
> nvarchar)
> --suma todos
> set @totfinal = @total-@ntotal
>
> set @ejecuta = 'update #tabmmetas set '+@vnomven+'='+cast(@totfinal as
> nvarchar)+' where id='+''''+cast(@valor+9 as varchar(2))+''''
> exec (@ejecuta)
> update #tabmmetas set metatotal=metatotal+@totfinal where id=@valor+9
> update #tabmmetas set metatotal=metatotal+@totfinal where id=4
> --Aqui muevo los datos
> --Hasta aqui
> set @ejecuta = 'update #tabmmetas set
> '+@vnomven+'='+@vnomven+'+'+cast(@totfinal as nvarchar)+' where id=4'
> exec (@ejecuta)
> --Aqui las pruebas
> --Desde aqui como va actualmente en %
> --Para el campo meta total
> declare tabmeta cursor for select metatotal from #tabmmetas where id=2
> open tabmeta
> fetch next from tabmeta into @varmeta
> deallocate tabmeta
> declare tabmeta cursor for select metatotal from #tabmmetas where id=4
> open tabmeta
> fetch next from tabmeta into @varacumula
> deallocate tabmeta
> if @varmeta!=0--@metames!=0 and
> begin
> update #tabmmetas set metatotal=(@varacumula /@varmeta)*100 where id=6
> end
> --Para el campo nombre bd
> set @ejecuta = 'declare tabmeta cursor for select '+@vnomven+' from
> #tabmmetas where id=2'
> exec(@ejecuta)
> open tabmeta
> fetch next from tabmeta into @varmeta
> deallocate tabmeta
> set @ejecuta = 'declare tabmeta cursor for select '+@vnomven+' from
> #tabmmetas where id=4'
> exec(@ejecuta)
> open tabmeta
> fetch next from tabmeta into @varacumula
> deallocate tabmeta
> if @varacumula!=0 and @varmeta!=0
> begin
> set @ejecuta = 'update #tabmmetas set '+@vnomven+'=('+cast(@varacumula as
> nvarchar)+'/'+cast(@varmeta as nvarchar)+')*100 where id=6'
> exec (@ejecuta)
> end
> --Para el campo nombre bd
> set @ejecuta = 'declare tabmeta cursor for select '+@vnomven+' from
> #tabmmetas where id=2'
> exec(@ejecuta)
> open tabmeta
> fetch next from tabmeta into @varmeta
> deallocate tabmeta
> --Desde aqui la diferecia existente
> --Para el campo meta total
> declare tabmeta cursor for select metatotal from #tabmmetas where id=4
> open tabmeta
> fetch next from tabmeta into @varmeta
> deallocate tabmeta
> declare tabmeta cursor for select metatotal from #tabmmetas where id=5
> open tabmeta
> fetch next from tabmeta into @varacumula
> deallocate tabmeta
> update #tabmmetas set metatotal=(@varmeta -@varacumula) where id=8
> --Para el campo nombre bd
> set @ejecuta = 'declare tabmeta cursor for select '+@vnomven+' from
> #tabmmetas where id=4'
> exec(@ejecuta)
> open tabmeta
> fetch next from tabmeta into @varmeta
> deallocate tabmeta
> set @ejecuta = 'declare tabmeta cursor for select '+@vnomven+' from
> #tabmmetas where id=5'
> exec(@ejecuta)
> open tabmeta
> fetch next from tabmeta into @varacumula
> deallocate tabmeta
> if @varacumula!=0 and @varmeta!=0
> begin
> set @ejecuta = 'update #tabmmetas set '+@vnomven+'=('+cast(@varmeta as
> nvarchar)+'-'+cast(@varacumula as nvarchar)+') where id=8'
> exec (@ejecuta)
> end
> --Porecentaje del avanze a la Meta
> --Para el campo meta total
> declare tabmeta cursor for select metatotal from #tabmmetas where id=4
> open tabmeta
> fetch next from tabmeta into @varmeta
> deallocate tabmeta
> declare tabmeta cursor for select metatotal from #tabmmetas where id=5
> open tabmeta
> fetch next from tabmeta into @varacumula
> deallocate tabmeta
> if @varacumula!=0 and @varmeta!=0
> begin
> update #tabmmetas set metatotal=(@varmeta /@varacumula)*100 where id=9
> end
> --Para el campo nombre bd %
> set @ejecuta = 'declare tabmeta cursor for select '+@vnomven+' from
> #tabmmetas where id=4'
> exec(@ejecuta)
> open tabmeta
> fetch next from tabmeta into @varmeta
> deallocate tabmeta
> set @ejecuta = 'declare tabmeta cursor for select '+@vnomven+' from
> #tabmmetas where id=5'
> exec(@ejecuta)
> open tabmeta
> fetch next from tabmeta into @varacumula
> deallocate tabmeta
> if @varacumula!=0
> begin
> set @ejecuta = 'update #tabmmetas set '+@vnomven+'=('+cast(@varmeta as
> nvarchar)+'/'+cast(@varacumula as nvarchar)+')*100 where id=9'
> exec (@ejecuta)
> end
> fetch next from curbd into @vnomven
> end
> close curbd
> end
> deallocate curbd
> ----Calculos finales
> select * from #tabmmetas order by id
> drop table #tabmmetas
>
> Solo estoy ejecutando sql dinamico para concatenar un determinado campo :
> Ejm
> set @ejecuta = 'declare tabmeta cursor for select '+@vnomven+' from
> #tabmmetas where id=5'
> Aqui el campo a actualizar es nombre de vendedor �Porque lo hago? porque la
> tabla temporal es creada desde una tabla donde los vendedores no son
> fijos y
> pueden haber nuevos cada semana.
>
> Hice los cambios pero me sigue saturando el ancho de banda
>
> Disculpen las molestias
> adjunto el archivo final que muestra en el cliente y la forma brutal
> como me
> satura
>
> Luis
>
>
>
>
> "Aguardientico" <gusgon1 at nospam dot com> escribi� en el mensaje de
> noticias news:%23dgS795...@TK2MSFTNGP02.phx.gbl...
>> Hola Luis:
>>
>> Al hacer el sp en la forma que lo esas haciendo (valga la redundancia),
>> estas aplicando muchas malas practicas.
>>
>> No utilices codigo sql dinamico, por ejemplo en vez de poner set @ejecuta
>> 'sentencia sql'; exec @ejecuta;
>> Pon simplemente sentencia sql. Asi sql server puede saber si la sentencia
>> tiene que hacerla remota o no.
>>
>> Algunos de tus cursores no tienen sentido (o al menos as� parece) puedes
>> sacar los datos que necesitas directamente del select.
>>
>> En la forma que tienes configurado el select, haces que Sql Server mande
>> todos los datos a tu cliente y trate de hacer el procesamiento desde el
>> cliente y es por eso el gran consumo de ancho de banda que tienes.
>>
>> Atte.
>> Gustavo
>>
>> "Luis Mata" <lm...@cclf.com.pe> wrote in message
>> news:u7sGZryf...@TK2MSFTNGP05.phx.gbl...
>>> Las consultas son directas al servidor.
>>>
>>> - quizas las consultas ejecutadas con exec() sean lentas
>>> - usar #tabla la haga lenta
>>>
>>> pego el procedure que me consume ancho de banda
>>>
>>> sp en sql 2008 sp1
>>>
>>> ALTER proc [dbo].[meta_total_vendedor] @panio char(4), @pmes char(2)
>>> as
>>> declare @notc char(1)
>>> set @notc = 'N'
>>> --Inserto los dias del mes
>>> SET LANGUAGE Spanish
>>> --convirtiendo a fecha
>>> declare @fechagen datetime,@fechatest datetime,@diastest int, @dias4m
>>> int
>>> if cast(@panio as int)!=year(getdate()) or cast(@pmes as
>>> int)!=month(getdate())
>>> begin
>>> set @fechatest = cast(@panio+'-01'+'-'+@pmes as datetime)
>>> set @diastest = DAY(DATEADD(DAY, -1, CONVERT(VARCHAR(6), DATEADD(MONTH,
>>> 1, @fechatest), 112) + '01'))
>>> set @fechagen = cast(@panio+'-'+cast(@diastest as char(2))+'-'+@pmes as
>>> datetime)
>>> end
>>> else
>>> begin
>>> set @fechagen = getdate()
>>> end
>>> --Variables
>>> declare @anio int,@mes int
>>> set @anio = YEAR(@fechagen)
>>> set @mes = MONTH(@fechagen)
>>> declare @dinicial datetime, @numdias int, @diaactual int, @diareal
>>> decimal(12,4)
>>> declare @ejecuta varchar(7500), @vnomven varchar(20)
>>> set @dinicial = @fechagen-(day(@fechagen)-1)
>>> set @numdias = DAY(DATEADD(DAY, -1, CONVERT(VARCHAR(6),
>>> DATEADD(MONTH, 1,
>>> @fechagen), 112) + '01'))
>>> set @dias4m = @numdias -4
>>> set @diaactual = day(@fechagen)
>>> set @diareal = (cast(@diaactual as decimal(12,4))/cast(@numdias as
>>> decimal(12,4)))*(cast(@numdias as decimal(12,4))-4)
>>> --creo la tabla
>>> create table #tabmmetas(ID int not null default 0,c1 varchar(90) not
>>> null
>>> default space(0),c2 varchar(60)not null default space(0),c3
>>> varchar(60),metatotal decimal(12,2) not null default 0)
>>> set @ejecuta = 'insert into #tabmmetas values(1,'+''''+'Dia Actual (para
>>> calc: '+cast(@diareal as nvarchar(15))+')'+''''+','+''''+cast(@diaactual
>>> as varchar(2))+''''+','+''''+'Hoy'+''''+',0)'
>>> print @ejecuta
>>> EXEC (@ejecuta)
>>> set @ejecuta = 'insert into #tabmmetas values(2,'+''''+'Cuota del
>>> Mes'+''''+','+''''+''+''''+','+''''+''+''''+',0)'--CAMBIO
>>> EXEC (@ejecuta)
>>> set @ejecuta = 'insert into #tabmmetas values(3,'+''''+'Cuota
>>> Diaria'+''''+','+''''+ltrim(str(@dias4m))+''''+','+''''+'Dias'+''''+',0)'
>>>
>>> EXEC (@ejecuta)
>>> set @ejecuta = 'insert into #tabmmetas values(4,'+''''+'Acumulado al Dia
>>> de HOY'+''''+','+''''+''+''''+','+''''+''+''''+',0)'
>>> EXEC (@ejecuta)
>>> set @ejecuta = 'insert into #tabmmetas values(5,'+''''+'Como deberia Ir
>>> S/.'+''''+','+''''+''+''''+','+''''+''+''''+',0)'
>>> EXEC (@ejecuta)
>>> set @ejecuta = 'insert into #tabmmetas values(6,'+''''+'Acumulado a la
>>> Fecha En %'+''''+','+''''+''+''''+','+''''+''+''''+',0)'
>>> EXEC (@ejecuta)
>>> set @ejecuta = 'insert into #tabmmetas values(7,'+''''+'Como deberia Ir
>>> En %'+''''+','+''''+''+''''+','+''''+''+''''+',0)'
>>> EXEC (@ejecuta)
>>> set @ejecuta = 'insert into #tabmmetas
>>> values(8,'+''''+'Diferencia'+''''+','+''''+''+''''+','+''''+''+''''+',0)'
>>>
>>> EXEC (@ejecuta)
>>> set @ejecuta = 'insert into #tabmmetas values(9,'+''''+'Acum. vs Como
>>> deberia ir En %'+''''+','+''''+''+''''+','+''''+''+''''+',0)'
>>> EXEC (@ejecuta)
>>> --abro la tabla bd para adicionar los campos
>>> declare @contar int,@metames decimal(12,2),@metatienda decimal(12,2)
>>> --meta del mes
>>> declare @namebd varchar(5),@metaahora decimal(12,2)
>>> set @namebd = (SELECT DB_NAME() AS [Current Database])
>>> set @ejecuta = 'declare sacameta cursor for select '+@namebd+' from
>>> maestro.dbo.tabtmetas where anio='+@panio+' and mes='+@pmes
>>> exec (@ejecuta)
>>> open sacameta
>>> fetch next from sacameta into @metames
>>> set @metatienda = @metames
>>> deallocate sacameta
>>> set @metaahora = @metames/(@numdias-4)
>>> --set @metames = (select total from maestro.dbo.tabtmetas where
>>> anio=@anio and mes = @mes)
>>> set @ejecuta = 'update #tabmmetas set metatotal='+cast(@metames as
>>> nvarchar)+' where id = 2'
>>> exec (@ejecuta)
>>> set @ejecuta = 'update #tabmmetas set metatotal='+cast(@metames/@dias4m
>>> as nvarchar)+' where id = 3'
>>> exec (@ejecuta)
>>> set @ejecuta = 'update #tabmmetas set
>>> metatotal='+cast((@metames/@dias4m)*@diareal as nvarchar)+' where id =
>>> 5'---@numdias-4
>>> exec (@ejecuta)
>>> if @metames!=0
>>> begin
>>> set @ejecuta = 'update #tabmmetas set
>>> metatotal='+cast((((@metaahora*@diareal)/@metames)*100) as nvarchar)+'
>>> where id = 7'
>>> end
>>> exec (@ejecuta)
>>> set @contar = 0
>>> declare curbd cursor for SELECT VENDEDOR FROM ARCHTRA1 WHERE
>>> year(fecha)=@anio and month(fecha)=@mes and tot_sol!=0 group by vendedor
>>> union
>>> SELECT VENDEDOR FROM devolu WHERE year(fecha)=@anio and
>>> month(fecha)=@mes and tot_sol!=0 group by vendedor
>>> UNION
>>> SELECT VENDEDOR FROM NOTA_DEB WHERE year(fecha)=@anio and
>>> month(fecha)=@mes and tot_sol!=0 group by vendedor ORDER BY VENDEDOR
>>> open curbd
>>> fetch next from curbd into @vnomven
>>> while @@fetch_status = 0
>>> begin
>>> set @ejecuta = 'alter table #tabmmetas add '+LOWER(rtrim(@vnomven))+'
>>> decimal(12,2) default 0 not null'
>>> exec (@ejecuta)
>>> set @metames = (select meta from tabmetavend where anio=@anio and mes =
>>> @mes and vendedor=rtrim(@vnomven))
>>> set @ejecuta = 'update #tabmmetas set
>>> '+lower(rtrim(@vnomven))+'='+cast(@metames as nvarchar)+' where id = 2'
>>> exec (@ejecuta)
>>> if @metames != 0
>>> begin
>>> set @ejecuta = 'update #tabmmetas set
>>> '+lower(rtrim(@vnomven))+'='+cast(@metames/@dias4m as nvarchar)+' where
>>> id = 3'
>>> exec (@ejecuta)
>>> set @ejecuta = 'update #tabmmetas set
>>> '+lower(rtrim(@vnomven))+'='+cast((@metames/(@dias4m))*(@diareal) as
>>> nvarchar)+' where id = 5'
>>> exec (@ejecuta)
>>> if @metames!=0
>>> begin
>>> set @ejecuta = 'update #tabmmetas set
>>> '+lower(rtrim(@vnomven))+'='+cast((((@metames/@dias4m)*@diareal)/@metames)*100
>>>
>>> as nvarchar)+' where id = 7'
>>> exec (@ejecuta)
>>> end
>>> end
>>> fetch next from curbd into @vnomven
>>> end
>>> ----cambio a spanish
>>> declare @vtatotal decimal(12,2),@nctotal decimal(12,2),@ndtotal
>>> decimal(12,2),@totfinal decimal(12,2),@varmeta decimal(12,2),
>>> @varacumula
>>> decimal(12,2)
>>> DECLARE @valor int
>>> close curbd
>>> set @valor = 0
>>> while @valor <= (@numdias)-1
>>> begin
>>> --cast(@valor+1 as varchar(2))+
>>> set @ejecuta = 'insert into #tabmmetas(id,c2,c3)
>>> values('+''''+cast(@valor+10 as
>>> varchar(2))+''''+','+''''+datename(weekday,
>>> dateadd(d,@valor,@dinicial))+''''+','+''''+convert(char(6),dateadd(d,@valor,@dinicial),113)
>>>
>>> +''''+')'
>>> set @valor = @valor + 1
>>> EXEC (@ejecuta)
>>> open curbd
>>> fetch next from curbd into @vnomven
>>> while @@fetch_status = 0
>>> begin
>>> declare @unisol decimal(12,4), @bsol decimal(12,2), @dsol decimal(12,4),
>>> @neto decimal(15,6), @igv decimal(12,2), @bruto decimal(12,2),
>>> @total decimal(12,5), @ntotal decimal(12,5)
>>> set @total = 0
>>> set @ntotal = 0
>>> set @ejecuta = 'declare miventa cursor for select codarticul,
>>> precioprod, cantidad, descuento,proveedor from archtra3 where
>>> year(fecha)='+cast(@anio as char(4))+' and month(fecha)='+cast(@mes as
>>> char(2))+
>>> ' and day(fecha)='+cast(@valor as varchar(2))+' and
>>> vendedor='+''''+rtrim(@vnomven)+''''+
>>> ' union all
>>> select codarticul, precioprod * -1, cantidad, descuento,proveedor
>>> from devo_pro where year(fecha)='+cast(@anio as char(4))+' and
>>> month(fecha)='+cast(@mes as char(2))+
>>> ' and day(fecha)='+cast(@valor as varchar(2))+' and
>>> vendedor='+''''+rtrim(@vnomven)+''''+
>>> ' union all
>>> select codarticul, precioprod, cantidad, descuento,proveedor from
>>> notapro where year(fecha)='+cast(@anio as char(4))+' and
>>> month(fecha)='+cast(@mes as char(2))+
>>> ' and day(fecha)='+cast(@valor as varchar(2))+' and
>>> vendedor='+''''+rtrim(@vnomven)+''''+' order by codarticul'
>>> print @ejecuta
>>> exec (@ejecuta)
>>> declare @codigo varchar(13), @precio decimal(12,4), @cant decimal(12,4),
>>> @dscto decimal(12,2),@prov char(6),@excluye int,@nosuma int
>>> open miventa
>>> fetch next from miventa into @codigo,@precio, @cant, @dscto,@prov
>>> while @@fetch_status = 0
>>> begin
>>> if @prov = 'ZZZ002' OR @prov = 'SUM001' OR @prov = 'ZZZ004' OR @prov =
>>> 'ZZ003'
>>> BEGIN
>>> set @excluye = (select count(*) from maestro.dbo.taberrnocont where
>>> codigo=@codigo)
>>> if @excluye =0
>>> begin
>>> set @unisol = @precio --round(sqlworkdbf.precioprod *
>>> IIF(TTOD(sqlworkdbf.fecha)<fcsoles,sqlworkdbf.t_cambio,1),IIF(FECHA<vc4fec,2,4))&&&IIF(TTOD(archtra1.fecha)<fcsoles,sqlworkdbf.t_cambio,1)
>>>
>>> set @bsol = round(@unisol * (case @cant when 0 then 1 else @cant
>>> end),2)
>>> set @dsol = round(@bsol * (@dscto/100),4)
>>> set @neto = @bsol - @dsol
>>> set @igv = round(@neto * 0.19,2)
>>> set @bruto = round(@neto + @igv,2)
>>> set @ntotal = @ntotal + round(@bruto / 1.19,2)
>>> end
>>> END
>>> --else
>>> set @unisol = @precio --round(sqlworkdbf.precioprod *
>>> IIF(TTOD(sqlworkdbf.fecha)<fcsoles,sqlworkdbf.t_cambio,1),IIF(FECHA<vc4fec,2,4))&&&IIF(TTOD(archtra1.fecha)<fcsoles,sqlworkdbf.t_cambio,1)
>>>
>>> set @bsol = round(@unisol * (case @cant when 0 then 1 else @cant
>>> end),2)
>>> set @dsol = round(@bsol * (@dscto/100),4)
>>> set @neto = @bsol - @dsol
>>> set @igv = round(@neto * 0.19,2)
>>> set @bruto = round(@neto + @igv,2)
>>> set @total = @total + round(@bruto / 1.19,2)
>>> fetch next from miventa into @codigo,@precio, @cant, @dscto,@prov
>>> end
>>> deallocate miventa
>>> PRINT rtrim(@vnomven) + cast(@total as nvarchar)+' '+ cast(@ntotal as
>>> nvarchar)
>>> --suma todos
>>> set @totfinal = @total-@ntotal--@vtatotal+@nctotal+@ndtotal
>>>
>>> set @ejecuta = 'update #tabmmetas set '+@vnomven+'='+cast(@totfinal as
>>> nvarchar)+' where id='+''''+cast(@valor+9 as varchar(2))+''''
>>> exec (@ejecuta)
>>> set @ejecuta = 'update #tabmmetas set
>>> metatotal=metatotal+'+cast(@totfinal as nvarchar)+' where
>>> id='+''''+cast(@valor+9 as varchar(2))+''''
>>> exec (@ejecuta)
>>> set @ejecuta = 'update #tabmmetas set
>>> metatotal=metatotal+'+cast(@totfinal as nvarchar)+' where id=4'
>>> exec (@ejecuta)
>>> --Aqui muevo los datos
>>> --Hasta aqui
>>> set @ejecuta = 'update #tabmmetas set
>>> '+@vnomven+'='+@vnomven+'+'+cast(@totfinal as nvarchar)+' where id=4'
>>> exec (@ejecuta)
>>> --Aqui las pruebas
>>> --Desde aqui como va actualmente en %
>>> --Para el campo meta total
>>> set @ejecuta = 'declare tabmeta cursor for select metatotal from
>>> #tabmmetas where id=2'
>>> exec(@ejecuta)
>>> open tabmeta
>>> fetch next from tabmeta into @varmeta
>>> deallocate tabmeta
>>> set @ejecuta = 'declare tabmeta cursor for select metatotal from
>>> #tabmmetas where id=4'
>>> exec(@ejecuta)
>>> open tabmeta
>>> fetch next from tabmeta into @varacumula
>>> deallocate tabmeta
>>> if @varmeta!=0--@metames!=0 and
>>> begin
>>> set @ejecuta = 'update #tabmmetas set metatotal=('+cast(@varacumula as
>>> nvarchar)+'/'+cast(@varmeta as nvarchar)+')*100 where id=6'
>>> exec (@ejecuta)
>>> end
>>> --Para el campo nombre bd
>>> set @ejecuta = 'declare tabmeta cursor for select '+@vnomven+' from
>>> #tabmmetas where id=2'
>>> exec(@ejecuta)
>>> open tabmeta
>>> fetch next from tabmeta into @varmeta
>>> deallocate tabmeta
>>> set @ejecuta = 'declare tabmeta cursor for select '+@vnomven+' from
>>> #tabmmetas where id=4'
>>> exec(@ejecuta)
>>> open tabmeta
>>> fetch next from tabmeta into @varacumula
>>> deallocate tabmeta
>>> if @varacumula!=0 and @varmeta!=0
>>> begin
>>> set @ejecuta = 'update #tabmmetas set '+@vnomven+'=('+cast(@varacumula
>>> as nvarchar)+'/'+cast(@varmeta as nvarchar)+')*100 where id=6'
>>> exec (@ejecuta)
>>> end
>>> --Para el campo nombre bd
>>> set @ejecuta = 'declare tabmeta cursor for select '+@vnomven+' from
>>> #tabmmetas where id=2'
>>> exec(@ejecuta)
>>> open tabmeta
>>> fetch next from tabmeta into @varmeta
>>> deallocate tabmeta
>>> --Desde aqui la diferecia existente
>>> --Para el campo meta total
>>> set @ejecuta = 'declare tabmeta cursor for select metatotal from
>>> #tabmmetas where id=4'
>>> exec(@ejecuta)
>>> open tabmeta
>>> fetch next from tabmeta into @varmeta
>>> deallocate tabmeta
>>> set @ejecuta = 'declare tabmeta cursor for select metatotal from
>>> #tabmmetas where id=5'
>>> exec(@ejecuta)
>>> open tabmeta
>>> fetch next from tabmeta into @varacumula
>>> deallocate tabmeta
>>> set @ejecuta = 'update #tabmmetas set metatotal=('+cast(@varmeta as
>>> nvarchar)+'-'+cast(@varacumula as nvarchar)+') where id=8'
>>> exec (@ejecuta)
>>> --Para el campo nombre bd
>>> set @ejecuta = 'declare tabmeta cursor for select '+@vnomven+' from
>>> #tabmmetas where id=4'
>>> exec(@ejecuta)
>>> open tabmeta
>>> fetch next from tabmeta into @varmeta
>>> deallocate tabmeta
>>> set @ejecuta = 'declare tabmeta cursor for select '+@vnomven+' from
>>> #tabmmetas where id=5'
>>> exec(@ejecuta)
>>> open tabmeta
>>> fetch next from tabmeta into @varacumula
>>> deallocate tabmeta
>>> if @varacumula!=0 and @varmeta!=0
>>> begin
>>> set @ejecuta = 'update #tabmmetas set '+@vnomven+'=('+cast(@varmeta as
>>> nvarchar)+'-'+cast(@varacumula as nvarchar)+') where id=8'
>>> exec (@ejecuta)
>>> end
>>> --Porecentaje del avanze a la Meta
>>> --Para el campo meta total
>>> set @ejecuta = 'declare tabmeta cursor for select metatotal from
>>> #tabmmetas where id=4'
>>> exec(@ejecuta)
>>> open tabmeta
>>> fetch next from tabmeta into @varmeta
>>> deallocate tabmeta
>>> set @ejecuta = 'declare tabmeta cursor for select metatotal from
>>> #tabmmetas where id=5'
>>> exec(@ejecuta)
>>> open tabmeta
>>> fetch next from tabmeta into @varacumula
>>> deallocate tabmeta
>>> if @varacumula!=0 and @varmeta!=0
>>> begin
>>> set @ejecuta = 'update #tabmmetas set metatotal=('+cast(@varmeta as
>>> nvarchar)+'/'+cast(@varacumula as nvarchar)+')*100 where id=9'
>>> exec (@ejecuta)
>>> end
>>> --Para el campo nombre bd %
>>> set @ejecuta = 'declare tabmeta cursor for select '+@vnomven+' from
>>> #tabmmetas where id=4'
>>> exec(@ejecuta)
>>> open tabmeta
>>> fetch next from tabmeta into @varmeta
>>> deallocate tabmeta
>>> set @ejecuta = 'declare tabmeta cursor for select '+@vnomven+' from
>>> #tabmmetas where id=5'
>>> exec(@ejecuta)
>>> open tabmeta
>>> fetch next from tabmeta into @varacumula
>>> deallocate tabmeta
>>> if @varacumula!=0
>>> begin
>>> set @ejecuta = 'update #tabmmetas set '+@vnomven+'=('+cast(@varmeta as
>>> nvarchar)+'/'+cast(@varacumula as nvarchar)+')*100 where id=9'
>>> exec (@ejecuta)
>>> end
>>> fetch next from curbd into @vnomven
>>> end
>>> close curbd
>>> end
>>> deallocate curbd
>>> ----Calculos finales
>>> set @ejecuta = 'select * from #tabmmetas order by id'
>>> exec (@ejecuta)
>>> set @ejecuta = 'drop table #tabmmetas'
>>> exec (@ejecuta)
>>>
>>>
>>> y lo llamos desde el cliente:
>>> vano =2009
>>> vmes = 12
>>> =SQLEXEC(cscom, "exec maestro.dbo.meta_total ?vano,?vmes","sqltabla")
>>>
>>> Como ven el cliente solo lanza estas 3 lineas de codigo, en mi teoria
>>> esto me ayudaria a ahorrar el ancho de banda de mi VPN pero no es asi en
>>> la practica.
>>>
>>> �Que Pasa?
>>>
>>> Luis
>>>
>>>
>>> "Aguardientico" <gusgon1 at nospam dot com> escribi� en el mensaje de
>>> noticias news:uUQVb8sf...@TK2MSFTNGP06.phx.gbl...
>>>> Luis:
>>>>
>>>> Supongo que utilizas linkedservers, si es asi, debes tomar en cuenta
>>>> que
>>>> aunque sql server trata de ejecutar cada consulta en su respectivo
>>>> servidor, si est� mal configurada la consulta lo que hace es cargar
>>>> TODOS los datos en el server local y de ahi procesar la consulta.
>>>>
>>>> Te recomiendo que trates de filtrar las consultas para cada base de
>>>> datos para que desde el comienzo cada una de ellas te de los 50
>>>> registros (o los que necesites) y luego de eso hagas join entre todas
>>>> estas consultas para unir la informaci�n.
>>>>
>>>> "Luis Mata" <lm...@cclf.com.pe> wrote in message
>>>> news:uE4zgRne...@TK2MSFTNGP02.phx.gbl...
>>>>> Hola
>>>>>
>>>>> Una Consulta, hace tiempo que decidi hacer que todo lo que es
>>>>> consultas, consolidados se hiciera con SP,
>>>>> trabajo con vpn con 9 sedes remotas
>>>>> Los procedimientos toman datos de dias, semanas, meses � a�os lo cual
>>>>> si tuviera que llevar de cada tienda los datos a la pc cliente y ahi
>>>>> recien consolidarlos me saturaria el ancho de banda.
>>>>> Hice un procedimiento que hace todo eso pero en el servidor y de lo
>>>>> que
>>>>> deberia de transferir 300 mil registros, el procedimiento ya procesado
>>>>> me transfiere 50 registros.
>>>>> El procedimiento demora +- 3 � 4 min en culminar el proceso.
>>>>> El cliente solo lanza una linea de codigo invocando dicho
>>>>> procedimiento, pero que sucede que durante ese tiempo el consumo de
>>>>> ancho de banda se eleva considerablemente hasta el punto de hacer caer
>>>>> la conexion de las demas pcs, luego de hacer todo este alboroto me
>>>>> muestra en el cliente los 50m registros nada mas:
>>>>>
>>>>> - que es lo que satura mi ancho de banda durante ese proceso si no hay
>>>>> data que fluya entre una sede remota y la otra?
>>>>> - Mi concepto de crear procedimientos para poder aprovechar al maximo
>>>>> el ancho de banda esta errado?
>>>>> - de todas manera una linea de codigo invocando un procedimiento de
>>>>> esa magnitud deberia de saturarme mi ancho de banda?
>>>>>
>>>>> Si el caso fuera asi cual es la gracia de hacer todo con
>>>>> procedimientos
>>>>> almacenados.?
>>>>>
>>>>> Att
>>>>> Luis Mata
>>>>>
>>>>>
>>>>> __________ Information from ESET NOD32 Antivirus, version of virus
>>>>> signature database 4680 (20091211) __________
>>>>>
>>>>> The message was checked by ESET NOD32 Antivirus.
>>>>>
>>>>> http://www.eset.com
>>>>>
>>>>>
>>>>>
>>>>
>>>> __________ Information from ESET NOD32 Antivirus, version of virus
>>>> signature database 4694 (20091216) __________
>>>>
>>>> The message was checked by ESET NOD32 Antivirus.
>>>>
>>>> http://www.eset.com
>>>>
>>>>
>>>>
>>>
>>>
>>> __________ Information from ESET NOD32 Antivirus, version of virus
>>> signature database 4697 (20091217) __________
>>>
>>> The message was checked by ESET NOD32 Antivirus.
>>>
>>> http://www.eset.com
>>>
>>>
>>>
>>
>> __________ Information from ESET NOD32 Antivirus, version of virus
>> signature database 4697 (20091217) __________
>>
>> The message was checked by ESET NOD32 Antivirus.
>>
>> http://www.eset.com
>>
>>
>>

Luis Mata

unread,
Dec 18, 2009, 6:27:19 PM12/18/09
to
Localmente no puedo ver la saturacion pero la respuesta es solo por segundos
de diferencia entre ambas sedes.
remotamente llega al extremo de perder respuesta del el Ping.
Me pasa con este tipo de procedimientos de consolidado, realizando opciones
de generar proformas, ingresos de almacen, facturaciones no hay ningun
problema, tengo algo de 7 u 8 procedures de esta carcteristica que me genera
este problema.

Por ejemplo en el procedure mostrado me equivaldria a tener que hacer un
select a las ventas del mes que me llevaria algo de 1000 mil registros y por
medio de la aplicacion clientes armar el consolidado por vendedor.

Pero para no hacer esto dise�e el procedure para que solo me envie los 41
registros ya consolidados.

es asi o estoy errado?

Luis Mata

"Dany" <chor...@hotmail.com> escribi� en el mensaje de noticias
news:OLiNnXDg...@TK2MSFTNGP06.phx.gbl...

Luis Mata

unread,
Dec 18, 2009, 6:49:42 PM12/18/09
to
Coloco las estadisticas:

Client Execution Time 18:48:10
Query Profile Statistics
Number of INSERT, DELETE and UPDATE statements 2048 2048.0000
Rows affected by INSERT, DELETE, or UPDATE statements 2034 2034.0000
Number of SELECT statements 32350 32350.0000
Rows returned by SELECT statements 23365 23365.0000
Number of transactions 2048 2048.0000
Network Statistics
Number of server roundtrips 1 1.0000
TDS packets sent from client 1 1.0000
TDS packets received from server 171 171.0000
Bytes sent from client 98 98.0000
Bytes received from server 686486 686486.0000
Time Statistics
Client processing time 2788 2788.0000
Total execution time 2934 2934.0000
Wait time on server replies 146 146.0000


Los bytes recibidos son excesivos en que momento me los envia y para que si
solo quiero el final nada mas.

Luis
"Dany" <chor...@hotmail.com> escribi� en el mensaje de noticias
news:OLiNnXDg...@TK2MSFTNGP06.phx.gbl...

0 new messages