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

Consulta de ejecucion de Procedimiento

10 views
Skip to first unread message

Luis Mata

unread,
Dec 11, 2009, 10:10:25 AM12/11/09
to
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

Luis Mata

unread,
Dec 11, 2009, 11:11:42 AM12/11/09
to
Utilizo actualmente sql 2008 STD sp1


"Luis Mata" <lm...@cclf.com.pe> escribi� en el mensaje de noticias
news:uE4zgRne...@TK2MSFTNGP02.phx.gbl...

Victor Koch arroba punto punto punto

unread,
Dec 11, 2009, 11:24:57 AM12/11/09
to
Hola

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...

Luis Mata

unread,
Dec 11, 2009, 12:19:03 PM12/11/09
to
En su lenguaje nativo del software de desarrollo vfp:

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

unread,
Dec 13, 2009, 12:06:08 AM12/13/09
to
Hola Luis, pero no entiendo que quieres hacer, si tienes que retornar varios
registros es logico que tarde

--

------------------------------------------------
Maxi Accotto
MVP en SQL Server
http://blog.maxiaccotto.com
--------------------------------------------------

"Luis Mata" <lm...@cclf.com.pe> wrote in message
news:eDWNZZoe...@TK2MSFTNGP02.phx.gbl...

Luis Mata

unread,
Dec 14, 2009, 5:10:34 AM12/14/09
to
No la figura es esta:

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...

Aguardientico

unread,
Dec 16, 2009, 11:12:17 PM12/16/09
to
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...

> __________ 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

Luis Mata

unread,
Dec 17, 2009, 9:58:42 AM12/17/09
to
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...

Aguardientico

unread,
Dec 18, 2009, 12:03:56 AM12/18/09
to
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...

> 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) __________

Aguardientico

unread,
Dec 18, 2009, 11:08:57 PM12/18/09
to
Luis:

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 Mata

unread,
Dec 21, 2009, 3:16:09 PM12/21/09
to
La variable cursor me obliga a tener que haceru n script para todo el
procedimiento y no me parece una buen alternativa,
porque cuando hago mencion a la variable tabla fuera del script me dice que
la variable no esta declarada , o conoces alguna forma de evitar esto.

Luis

"Aguardientico" <gusgon1 at nospam dot com> escribi� en el mensaje de

noticias news:Oh0v2DGg...@TK2MSFTNGP06.phx.gbl...

Aguardientico

unread,
Dec 22, 2009, 1:04:38 AM12/22/09
to
Crea la variable tabla como global: @@tabla en luga de @tabla

"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) __________

0 new messages