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
"Luis Mata" <lm...@cclf.com.pe> escribi� en el mensaje de noticias
news:uE4zgRne...@TK2MSFTNGP02.phx.gbl...
Y como mandas a ejecutar ese SP desde la aplicaci�n en los clientes.
--
Un Saludo, V�ctor Koch
"Luis Mata" <lm...@cclf.com.pe> escribi� en el mensaje
news:uE4zgRne...@TK2MSFTNGP02.phx.gbl...
sqlexec(cscom, "exec resumen_ventas_por_proveedor ?feini, ?fecfin","mi
resultado")
esto demoraria 3 a 4 min si se pone un rango de fecha largo , lo que me
satura el ancho de banda.
sqlexec(cscom, "select * from vendedor","miresultado")
esto es al instante
Ojo en una red LAN esto no se siente ni se percibe, pero en la VPN si.
Luis
ejemplo
"Victor Koch" <v i c t o r (arroba)correo(punto)waldbott(punto)com(punto)ar>
escribi� en el mensaje de noticias
news:uYedK4ne...@TK2MSFTNGP04.phx.gbl...
--
------------------------------------------------
Maxi Accotto
MVP en SQL Server
http://blog.maxiaccotto.com
--------------------------------------------------
"Luis Mata" <lm...@cclf.com.pe> wrote in message
news:eDWNZZoe...@TK2MSFTNGP02.phx.gbl...
una venta de un a�o digamos con un millon de registros, en los cuales
intervienen 50 proveedores las ventas estan en 9 bd que representan
sucursales, si a esto le quiero agregar unidades de stock actual intervienen
mas tablas por cada bd.
Obviamente este consolidado lo hago en un SP que lo que hace es crear vistas
e ir creanto un temporal con lo 50 registros y les va asignnado las ventas y
unidades a cada proveedor el resultado final es solo 50 reg con sus
respectivas ventas y unidades.
esto demora de 3 a 4 min el retorno es solo 50 reg. pero me satura en ancho
de banda que da miedo.
Luis
"Maxi Accotto" <maxi_a...@msn.comnospam> escribi� en el mensaje de
noticias news:9BD080BD-2C01-4EE5...@microsoft.com...
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...
> __________ 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.
- 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...
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...
> 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) __________
Prueba en vez de crear la tabla temporal, crea una variable de tipo table.
Puede ser no estoy seguro de que al ser tabla temporal, trate de crearla en
el tempdb local y no en el remoto.
"Luis Mata" <lm...@cclf.com.pe> wrote in message
news:uepDIuCg...@TK2MSFTNGP06.phx.gbl...
> Cambios realizados:
> 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 @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
> 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
> 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...
__________ Information from ESET NOD32 Antivirus, version of virus signature database 4700 (20091218) __________
Luis
"Aguardientico" <gusgon1 at nospam dot com> escribi� en el mensaje de
noticias news:Oh0v2DGg...@TK2MSFTNGP06.phx.gbl...
"Luis Mata" <lm...@cclf.com.pe> wrote in message
news:O8dqarng...@TK2MSFTNGP04.phx.gbl...
__________ Information from ESET NOD32 Antivirus, version of virus signature database 4707 (20091221) __________