Nadie me responde

16/12/2009 - 21:47 por Luis Mata | Informe spam
No hay respuesta?
porque un procedimiento que devuelve solo 50 registros, pero que en el mismo
srver me ejecuta un consolidado de 9 bd con 3 tablas cada uno, me ocupa
tanto ancho de banda y me desconecta las demas pcs.
alguien hizo esta prueba con sedes remotas, porque en la LAN se ve normal ni
se siente pero por vpn no funciona.

Luis

Preguntas similare

Leer las respuestas

#1 aa
17/12/2009 - 02:45 | Informe spam
Es un problema de red.
"Luis Mata" wrote in message
news:u$
No hay respuesta?
porque un procedimiento que devuelve solo 50 registros, pero que en el
mismo srver me ejecuta un consolidado de 9 bd con 3 tablas cada uno, me
ocupa tanto ancho de banda y me desconecta las demas pcs.
alguien hizo esta prueba con sedes remotas, porque en la LAN se ve normal
ni se siente pero por vpn no funciona.

Luis
Respuesta Responder a este mensaje
#2 Luis Mata
17/12/2009 - 10:10 | Informe spam
No es problema de la red.
porque todo funciona correcto Internet, Correo, el sistema con los select,
insert, updateel ping al server es estable sin cortes, pero el problema
ocurre cuando hago lo abajo mencionado.

creo que no me doy muy bien a entender. quizás los que hayan hecho y corrido
sistema solo a nivel LAN no lo vayan a notar, pero lo que corren sistema
físicamente separadas por 475 km con un acho de banda dedicado de 192 Kbps
con un servidor de datos a un extremo y en el otro los clientes ahí es donde
se siente lo de abajo mencionado.

- estoy pensando descartar los SP y crear vistas con dichos consolidado para
poder bajarlos solo con un select
- Pero que acaso es una mala característica del SQL con sus SP.

Luis

"aa" escribió en el mensaje de noticias
news:%
Es un problema de red.
"Luis Mata" wrote in message
news:u$
No hay respuesta?
porque un procedimiento que devuelve solo 50 registros, pero que en el
mismo srver me ejecuta un consolidado de 9 bd con 3 tablas cada uno, me
ocupa tanto ancho de banda y me desconecta las demas pcs.
alguien hizo esta prueba con sedes remotas, porque en la LAN se ve normal
ni se siente pero por vpn no funciona.

Luis




Respuesta Responder a este mensaje
#3 Maxi Accotto
23/12/2009 - 03:27 | Informe spam
Luis, danos mas datos por favor.
Que SQL es, como es que se desconectan? como esta la base en autoclose?



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

"Luis Mata" wrote in message
news:u$
No hay respuesta?
porque un procedimiento que devuelve solo 50 registros, pero que en el
mismo srver me ejecuta un consolidado de 9 bd con 3 tablas cada uno, me
ocupa tanto ancho de banda y me desconecta las demas pcs.
alguien hizo esta prueba con sedes remotas, porque en la LAN se ve normal
ni se siente pero por vpn no funciona.

Luis
Respuesta Responder a este mensaje
#4 Luis Mata
23/12/2009 - 04:14 | Informe spam
Version de SQL

- Microsoft SQL Server 2008 (RTM) - 10.0.1600.22 (X64) Jul 9 2008
14:17:44 Copyright (c) 1988-2008 Microsoft Corporation Standard Edition
(64-bit) on Windows NT 6.0 <X64> (Build 6001: Service Pack 1)
- Windows 2008 server 64 bits con todos los SP'S

Lo que sucede es que cree un sistema que yo considere cliente servidor puro,
trabajando full procedimientos almacenados para no congestionar mi ancho de
banda.
realizando consolidados de ventas, stocks, compras de clientes que tenian
cargas enormes como lo menciono en otros hilos. Pero en la practica lo que
yo creo: lanzar una linea de codigo invocando el procedure para que este
consolide los datos y cree una tabla y me devuleva solo 45 registros de lo
miles de registros que se requiere para el consolidado, a la hora de la hora
igual me satura el ancho de banda.

Ojo, a nivel LAN ni se siente, pero en mi VPN con 192 kbps se come todo mi
ancho de banda.

y el resultado final : 45 - 50 reg.

¿En que me consume tanto el ancho de banda?

ahora miestras la aplicacion haga procesos simples como una proforma,
facturas, ingresos.. osea insert, update, delete..etc trabaja sin problemas
pero si en eso alguien lanza llamando los reportes de consolidado... fatal
todas las transacciones anteriores demora lo que demora el SP en devolver la
Rpta, inclusive hasta el ping se corta y todos les sale el mensaje conexion
invalida, deben de salir del sistema volver a entrar para poder trabajar.

Esto me genera incomidad de parte de los usuarios y tambien a mi, porque lo
que creia una solucion no me esta sirviendo, porque es lo mismo que hacer un
select en el cliente traer los miles de registros del servidor al cliente y
ahi recien iniciar el consolidado, lo que me sa la sensacion de haber
perdido mi tiempo haciendo lo procedimientos almacenados.
Con un simple select, inner, group by no me soluciona mi necesidad.

Pego el codigo:

ALTER proc [dbo].[meta_total_vendedor] @panio char(4), @pmes char(2)
as
declare @notc char(1)
set @notc = 'N'
SET LANGUAGE Spanish
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
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)
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)
set @totfinal = @

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
set @ejecuta = 'update #tabmmetas set
'+@vnomven+'='+@vnomven+'+'+cast(@totfinal as nvarchar)+' where id=4'
exec (@ejecuta)
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 and
begin
update #tabmmetas set metatotal=(@varacumula /@varmeta)*100 where id=6
end
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
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
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 ) where id=8
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
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
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

Como vez esto no es un simple consolidado.
te crea una tabla con encabezados de vendedores cuyos nombres pueden variar
porque no son estables, y crea un temporal en base a los vendedores que
internivieron en ventas del año y mes elegido, luego me carga las metas
establecidas e inserta los dias del mes ingresado y va asignando por
vendedor las ventas que le corresponde por dia del mes y luego suma el total
de ventas contra la meta del mes , saca el porcentaje de avance, como
deberia de ir a la fecha y su faltante o sobrant en totales.

Resultado final 41 registros simples.

es una falla mia o esta caracteristica es propia del sql.?

Luis






"Maxi Accotto" escribió en el mensaje de
noticias news:
Luis, danos mas datos por favor.
Que SQL es, como es que se desconectan? como esta la base en autoclose?



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

"Luis Mata" wrote in message
news:u$
No hay respuesta?
porque un procedimiento que devuelve solo 50 registros, pero que en el
mismo srver me ejecuta un consolidado de 9 bd con 3 tablas cada uno, me
ocupa tanto ancho de banda y me desconecta las demas pcs.
alguien hizo esta prueba con sedes remotas, porque en la LAN se ve normal
ni se siente pero por vpn no funciona.

Luis



Respuesta Responder a este mensaje
#5 aa
23/12/2009 - 20:07 | Informe spam
Si estas trabajando con ado al recordset ponele el cursorlocation en
aduseclient.
"Luis Mata" wrote in message
news:
Version de SQL

- Microsoft SQL Server 2008 (RTM) - 10.0.1600.22 (X64) Jul 9 2008
14:17:44 Copyright (c) 1988-2008 Microsoft Corporation Standard Edition
(64-bit) on Windows NT 6.0 <X64> (Build 6001: Service Pack 1)
- Windows 2008 server 64 bits con todos los SP'S

Lo que sucede es que cree un sistema que yo considere cliente servidor
puro, trabajando full procedimientos almacenados para no congestionar mi
ancho de banda.
realizando consolidados de ventas, stocks, compras de clientes que tenian
cargas enormes como lo menciono en otros hilos. Pero en la practica lo que
yo creo: lanzar una linea de codigo invocando el procedure para que este
consolide los datos y cree una tabla y me devuleva solo 45 registros de lo
miles de registros que se requiere para el consolidado, a la hora de la
hora igual me satura el ancho de banda.

Ojo, a nivel LAN ni se siente, pero en mi VPN con 192 kbps se come todo mi
ancho de banda.

y el resultado final : 45 - 50 reg.

¿En que me consume tanto el ancho de banda?

ahora miestras la aplicacion haga procesos simples como una proforma,
facturas, ingresos.. osea insert, update, delete..etc trabaja sin
problemas pero si en eso alguien lanza llamando los reportes de
consolidado... fatal todas las transacciones anteriores demora lo que
demora el SP en devolver la Rpta, inclusive hasta el ping se corta y todos
les sale el mensaje conexion invalida, deben de salir del sistema volver a
entrar para poder trabajar.

Esto me genera incomidad de parte de los usuarios y tambien a mi, porque
lo que creia una solucion no me esta sirviendo, porque es lo mismo que
hacer un select en el cliente traer los miles de registros del servidor al
cliente y ahi recien iniciar el consolidado, lo que me sa la sensacion de
haber perdido mi tiempo haciendo lo procedimientos almacenados.
Con un simple select, inner, group by no me soluciona mi necesidad.

Pego el codigo:

ALTER proc [dbo].[meta_total_vendedor] @panio char(4), @pmes char(2)
as
declare @notc char(1)
set @notc = 'N'
SET LANGUAGE Spanish
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
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)
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)
set @totfinal = @

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
set @ejecuta = 'update #tabmmetas set
'+@vnomven+'='+@vnomven+'+'+cast(@totfinal as nvarchar)+' where id=4'
exec (@ejecuta)
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 and
begin
update #tabmmetas set metatotal=(@varacumula /@varmeta)*100 where id=6
end
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
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
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 ) where id=8
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
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
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

Como vez esto no es un simple consolidado.
te crea una tabla con encabezados de vendedores cuyos nombres pueden
variar porque no son estables, y crea un temporal en base a los vendedores
que internivieron en ventas del año y mes elegido, luego me carga las
metas establecidas e inserta los dias del mes ingresado y va asignando por
vendedor las ventas que le corresponde por dia del mes y luego suma el
total de ventas contra la meta del mes , saca el porcentaje de avance,
como deberia de ir a la fecha y su faltante o sobrant en totales.

Resultado final 41 registros simples.

es una falla mia o esta caracteristica es propia del sql.?

Luis






"Maxi Accotto" escribió en el mensaje de
noticias news:
Luis, danos mas datos por favor.
Que SQL es, como es que se desconectan? como esta la base en autoclose?



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

"Luis Mata" wrote in message
news:u$
No hay respuesta?
porque un procedimiento que devuelve solo 50 registros, pero que en el
mismo srver me ejecuta un consolidado de 9 bd con 3 tablas cada uno, me
ocupa tanto ancho de banda y me desconecta las demas pcs.
alguien hizo esta prueba con sedes remotas, porque en la LAN se ve
normal ni se siente pero por vpn no funciona.

Luis






email Siga el debate Respuesta Responder a este mensaje
Ads by Google
Help Hacer una preguntaRespuesta Tengo una respuesta
Search Busqueda sugerida