problema con SP

02/02/2005 - 16:37 por Gabriel | Informe spam
Hola
tengo un programa en VBasic que llama a varios SP en el sql para calcular
estadisticas.

hay veces que este proceso dura minutos y otras veces horas.

hice un tracert sobre la DB que toca el SP y detecte que el programa se
queda procesando en un SP en particular.

les paso el codigo del SP para ver si alguno tiene una idea de como lo puedo
optimizar.

gracias.



CREATE PROCEDURE SP_CALC_RATING_CABLE @AX_PLAZA smallint,
@AX_FECHA_DESDE int, @AX_FECHA_HASTA int, @AX_INTERVALO int
AS
declare @GBA as smallint
declare @ROS as smallint
declare @CBA as smallint
declare @MZA as smallint
declare @FechaDesde as smalldatetime
declare @FechaHasta as smalldatetime
declare @Fecha as smalldatetime
declare @FechaN as int
declare @Segundos as int
declare @NroBloque as int
declare @CodError int
declare @DescError as nvarchar(100)
declare @Proceso as varchar(30)
select @GBA0
select @ROS 1
select @CBA 2
select @MZA 3
select @Proceso='CALC_RAT_CABLE_'+cast(@AX_PLAZA as varchar(3))
delete from ERRORES where Proceso=@Proceso
truncate table PESOSH_TMP
insert into PESOSH_TMP
select Fecha, Hogar, max(Peso) from AUDI_SAS_HOGAR where
Plaza=@AX_PLAZA and
Fecha between @AX_FECHA_DESDE and @AX_FECHA_HASTA
group by Fecha, Hogar order by Fecha, Hogar
set @CodError = @@Error
if @CodError <> 0
begin
set @DescError = (select Description from master.dbo.sysmessages where
Error=@CodError)
insert into ERRORES (Proceso, Error, Descripcion) values (@Proceso,
@DescError, 'Truncate table PESOSH_TMP')
return
end
truncate table PESOSI_TMP
insert into PESOSI_TMP
select Fecha, Hogar, Individuo, max(Peso) from AUDI_SAS_INDIV where
Plaza=@AX_PLAZA and
Fecha between @AX_FECHA_DESDE and @AX_FECHA_HASTA
group by Fecha, Hogar, Individuo order by Fecha,
Hogar, Individuo
set @CodError = @@Error
if @CodError <> 0
begin
set @DescError = (select Description from master.dbo.sysmessages where
Error=@CodError)
insert into ERRORES (Proceso, Error, Descripcion) values (@Proceso,
@DescError, 'Truncate table PESOSI_TMP')
return
end
truncate table FECHAS_TMP
set @CodError = @@Error
if @CodError <> 0
begin
set @DescError = (select Description from master.dbo.sysmessages where
Error=@CodError)
insert into ERRORES (Proceso, Error, Descripcion) values (@Proceso,
@DescError, 'Truncate table FECHAS_TMP')
return
end
insert into FECHAS_TMP
select distinct Fecha from AUDI_SAS_HOGAR where Plaza=@AX_PLAZA and
Fecha between @AX_FECHA_DESDE and @AX_FECHA_HASTA group by
Fecha order by Fecha
set @CodError = @@Error
if @CodError <> 0
begin
set @DescError = (select Description from master.dbo.sysmessages where
Error=@CodError)
insert into ERRORES (Proceso, Error, Descripcion) values (@Proceso,
@DescError, 'Insert into FECHAS_TMP')
return
end
calcular los pesos de los targets)
truncate table PESOS_TARGETS
set @CodError = @@Error
if @CodError <> 0
begin
set @DescError = (select Description from master.dbo.sysmessages where
Error=@CodError)
insert into ERRORES (Proceso, Error, Descripcion) values (@Proceso,
@DescError, 'Truncate table PESOS_TARGETS')
return
end
if @AX_Plaza=@GBA
begin
insert into PESOS_TARGETS
select F.Fecha as Fecha, T.Target as Target, T.Tipo as Tipo, CH.Hogar
as Hogar, '0' as Individuo, P.Peso as Peso
from FECHAS_TMP as F
inner join TARGETS_MC as T on
F.Fecha between T.VigDesde and T.VigHasta
inner join PESOSH_TMP as P on
P.Fecha=F.Fecha
inner join Produccion.dbo.CAT_HOGAR as CH on
CH.Plaza = T.Plaza and
CH.Fecha = P.Fecha and
CH.Hogar = P.Hogar and
CH.PuntosAAM between T.PuntosDesde and T.PuntosHasta
where T.Plaza=@AX_PLAZA and T.Tipo='H' order by Fecha, Target, Hogar
set @CodError = @@Error
if @CodError <> 0
begin
set @DescError = (select Description from master.dbo.sysmessages
where Error=@CodError)
insert into ERRORES (Proceso, Error, Descripcion) values (@Proceso,
@DescError, 'Insert into PESOS_TARGETS Hogares')
return
end
insert into PESOS_TARGETS
select F.Fecha as Fecha, T.Target as Target, T.Tipo as Tipo, CH.Hogar
as Hogar, CI.Boton as Individuo, P.Peso as Peso
from FECHAS_TMP as F
inner join TARGETS_MC as T on
F.Fecha between T.VigDesde and T.VigHasta
inner join PESOSI_TMP as P on
P.Fecha = F.Fecha
inner join Produccion.dbo.CAT_HOGAR as CH on
CH.Plaza = T.Plaza and
CH.Fecha = P.Fecha and
CH.Hogar = P.Hogar and
CH.PuntosAAM between T.PuntosDesde and T.PuntosHasta
inner join Produccion.dbo.CAT_INDIV as CI on
CI.Plaza = T.Plaza and
CI.Fecha = P.Fecha and
CI.Hogar = P.Hogar and
CI.Boton = P.Individuo and
CI.Edad between T.EdadDesde and T.EdadHasta and
(CI.Sexo = T.Sexos or T.Sexos = 3)
where T.Plaza=@AX_PLAZA and T.Tipo='I' order by Fecha, Target, Hogar,
Individuo
set @CodError = @@Error
if @CodError <> 0
begin
set @DescError = (select Description from master.dbo.sysmessages
where Error=@CodError)
insert into ERRORES (Proceso, Error, Descripcion) values (@Proceso,
@DescError, 'Insert into PESOS_TARGETS Individuos')
return
end
insert into PESOS_TARGETS
select F.Fecha as Fecha, T.Target as Target, T.Tipo as Tipo, CH.Hogar
as Hogar, CI.Boton as Individuo, P.Peso as Peso
from FECHAS_TMP as F
inner join TARGETS_MC as T on
F.Fecha between T.VigDesde and T.VigHasta
inner join PESOSI_TMP as P on
P.Fecha = F.Fecha
inner join Produccion.dbo.CAT_HOGAR as CH on
CH.Plaza = T.Plaza and
CH.Fecha = P.Fecha and
CH.Hogar = P.Hogar and
CH.PuntosAAM between T.PuntosDesde and T.PuntosHasta
inner join Produccion.dbo.CAT_INDIV as CI on
CI.Plaza = T.Plaza and
CI.Fecha = P.Fecha and
CI.Hogar = P.Hogar and
CI.Boton = P.Individuo and
CI.Edad between T.EdadDesde and T.EdadHasta
where T.Plaza=@AX_PLAZA and T.Tipo='A' and CI.Ama=1 order by Fecha,
Target, Hogar, Individuo
set @CodError = @@Error
if @CodError <> 0
begin
set @DescError = (select Description from master.dbo.sysmessages
where Error=@CodError)
insert into ERRORES (Proceso, Error, Descripcion) values (@Proceso,
@DescError, 'Insert into PESOS_TARGETS Amas')
return
end
end
if (@AX_Plaza=@ROS) or (@AX_Plaza=@CBA) or (@AX_Plaza=@MZA)
begin
insert into PESOS_TARGETS
select F.Fecha as Fecha, T.Target as Target, T.Tipo as Tipo, P.Hogar as
Hogar, '0' as Individuo, P.Peso as Peso
from FECHAS_TMP as F
inner join TARGETS_MC as T on
F.Fecha between T.VigDesde and T.VigHasta
inner join PESOSH_TMP as P on
P.Fecha=F.Fecha
inner join ProduccionInterior.dbo.CAT_HOGAR as CH on
CH.Plaza = T.Plaza and
CH.Fecha =
((year(dateadd(d,((1-(P.Hogar%10))*7),cast(substring(cast(F.Fecha as
varchar(8)),5,2)+'/'+right(cast(F.Fecha as
varchar(8)),2)+'/'+left(cast(F.Fecha as varchar(8)),4) as datetime)))*10000+

month(dateadd(d,((1-(P.Hogar%10))*7),cast(substring(cast(F.Fecha as
varchar(8)),5,2)+'/'+right(cast(F.Fecha as
varchar(8)),2)+'/'+left(cast(F.Fecha as varchar(8)),4) as datetime)))*100+

day(dateadd(d,((1-(P.Hogar%10))*7),cast(substring(cast(F.Fecha as
varchar(8)),5,2)+'/'+right(cast(F.Fecha as
varchar(8)),2)+'/'+left(cast(F.Fecha as varchar(8)),4) as datetime)))))
and
CH.Hogar = (P.Hogar/10) and
CH.PuntosAAM between T.PuntosDesde and T.PuntosHasta
where T.Plaza=@AX_PLAZA and T.Tipo='H' order by Fecha, Target, Hogar
set @CodError = @@Error
if @CodError <> 0
begin
set @DescError = (select Description from master.dbo.sysmessages where
Error=@CodError)
insert into ERRORES (Proceso, Error, Descripcion) values (@Proceso,
@DescError, 'Insert into PESOS_TARGETS Hogares')
return
end
insert into PESOS_TARGETS
select F.Fecha as Fecha, T.Target as Target, T.Tipo as Tipo, P.Hogar as
Hogar, P.Individuo as Individuo, P.Peso as Peso
from FECHAS_TMP as F
inner join TARGETS_MC as T on
F.Fecha between T.VigDesde and T.VigHasta
inner join PESOSI_TMP as P on
P.Fecha = F.Fecha
inner join ProduccionInterior.dbo.CAT_HOGAR as CH on
CH.Plaza = T.Plaza and
CH.Fecha =
((year(dateadd(d,((1-(P.Hogar%10))*7),cast(substring(cast(F.Fecha as
varchar(8)),5,2)+'/'+right(cast(F.Fecha as
varchar(8)),2)+'/'+left(cast(F.Fecha as varchar(8)),4) as datetime)))*10000+

month(dateadd(d,((1-(P.Hogar%10))*7),cast(substring(cast(F.Fecha as
varchar(8)),5,2)+'/'+right(cast(F.Fecha as
varchar(8)),2)+'/'+left(cast(F.Fecha as varchar(8)),4) as datetime)))*100+

day(dateadd(d,((1-(P.Hogar%10))*7),cast(substring(cast(F.Fecha as
varchar(8)),5,2)+'/'+right(cast(F.Fecha as
varchar(8)),2)+'/'+left(cast(F.Fecha as varchar(8)),4) as datetime)))))
and
CH.Hogar = (P.Hogar/10) and
CH.PuntosAAM between T.PuntosDesde and T.PuntosHasta
inner join ProduccionInterior.dbo.CAT_INDIV as CI on
CI.Plaza = T.Plaza and
CI.Fecha = CH.Fecha and
CI.Hogar = (P.Hogar/10) and
CI.Boton = P.Individuo and
CI.Edad between T.EdadDesde and T.EdadHasta and
(CI.Sexo = T.Sexos or T.Sexos = 3)
where T.Plaza=@AX_PLAZA and T.Tipo='I' order by Fecha, Target, Hogar,
Individuo
set @CodError = @@Error
if @CodError <> 0
begin
set @DescError = (select Description from master.dbo.sysmessages
where Error=@CodError)
insert into ERRORES (Proceso, Error, Descripcion) values (@Proceso,
@DescError, 'Insert into PESOS_TARGETS Individuos')
return
end
insert into PESOS_TARGETS
select F.Fecha as Fecha, T.Target as Target, T.Tipo as Tipo, P.Hogar as
Hogar, P.Individuo as Individuo, P.Peso as Peso
from FECHAS_TMP as F
inner join TARGETS_MC as T on
F.Fecha between T.VigDesde and T.VigHasta
inner join PESOSI_TMP as P on
P.Fecha = F.Fecha
inner join ProduccionInterior.dbo.CAT_HOGAR as CH on
CH.Plaza = T.Plaza and
CH.Fecha =
((year(dateadd(d,((1-(P.Hogar%10))*7),cast(substring(cast(F.Fecha as
varchar(8)),5,2)+'/'+right(cast(F.Fecha as
varchar(8)),2)+'/'+left(cast(F.Fecha as varchar(8)),4) as datetime)))*10000+

month(dateadd(d,((1-(P.Hogar%10))*7),cast(substring(cast(F.Fecha as
varchar(8)),5,2)+'/'+right(cast(F.Fecha as
varchar(8)),2)+'/'+left(cast(F.Fecha as varchar(8)),4) as datetime)))*100+

day(dateadd(d,((1-(P.Hogar%10))*7),cast(substring(cast(F.Fecha as
varchar(8)),5,2)+'/'+right(cast(F.Fecha as
varchar(8)),2)+'/'+left(cast(F.Fecha as varchar(8)),4) as datetime)))))
and
CH.Hogar = (P.Hogar/10) and
CH.PuntosAAM between T.PuntosDesde and T.PuntosHasta
inner join ProduccionInterior.dbo.CAT_INDIV as CI on
CI.Plaza = T.Plaza and
CI.Fecha = CH.Fecha and
CI.Hogar = (P.Hogar/10) and
CI.Boton = P.Individuo and
CI.Edad between T.EdadDesde and T.EdadHasta
where T.Plaza=@AX_PLAZA and T.Tipo='A' and CI.Ama=1 order by Fecha,
Target, Hogar, Individuo
set @CodError = @@Error
if @CodError <> 0
begin
set @DescError = (select Description from master.dbo.sysmessages
where Error=@CodError)
insert into ERRORES (Proceso, Error, Descripcion) values (@Proceso,
@DescError, 'Insert into PESOS_TARGETS Amas')
return
end
end

trabajar; BLOQUES_HST_MC historico de McCann)
select @FechaDesde=cast(cast((@AX_Fecha_Desde/10000) as varchar(4))+'/'+
cast(((@AX_Fecha_Desde %
10000)/100) as varchar(4)) + '/' +
cast((@AX_Fecha_Desde%100) as
varchar(4)) as smalldatetime)
select @FechaHasta=cast(cast((@AX_Fecha_Hasta/10000) as varchar(4))+'/'+
cast(((@AX_Fecha_Hasta %
10000)/100) as varchar(4)) + '/' +
cast((@AX_Fecha_Hasta%100) as
varchar(4)) as smalldatetime)
truncate table BLOQUES
set @CodError = @@Error
if @CodError <> 0
begin
set @DescError = (select Description from master.dbo.sysmessages where
Error=@CodError)
insert into ERRORES (Proceso, Error, Descripcion) values (@Proceso,
@DescError, 'Truncate BLOQUES')
return
end
delete from BLOQUES_HST_MC where Plaza=@AX_PLAZA and Fecha between
@AX_Fecha_Desde and @AX_Fecha_Hasta
set @CodError = @@Error
if @CodError <> 0
begin
set @DescError = (select Description from master.dbo.sysmessages where
Error=@CodError)
insert into ERRORES (Proceso, Error, Descripcion) values (@Proceso,
@DescError, 'Delete from BLOQUES_HST_MC')
return
end
select @Fecha = @FechaDesde
while @Fecha <= @FechaHasta
begin
select @Segundos!600
select @NroBloque=0
select @FechaN=year(@Fecha)*10000+month(@Fecha)*100+day(@Fecha)
while @Segundos < 108000
begin
select @NroBloque=@NroBloque+1
insert into BLOQUES (Plaza, Fecha, NroBloque, SegDesde, SegHasta)
values (@AX_Plaza, @FechaN, @NroBloque, @Segundos,
(@Segundos+@AX_Intervalo))
set @CodError = @@Error
if @CodError <> 0
begin
set @DescError = (select Description from master.dbo.sysmessages
where Error=@CodError)
insert into ERRORES (Proceso, Error, Descripcion) values
(@Proceso, @DescError, 'Insert into BLOQUES Fecha '+cast(@FechaN as
varchar(8))+ ' Nro Bloque ' + cast(@NroBloque as varchar(2)))
return
end
insert into BLOQUES_HST_MC (Plaza, Fecha, NroBloque, SegDesde,
SegHasta)
values (@AX_Plaza, @FechaN, @NroBloque, @Segundos,
(@Segundos+@AX_Intervalo))
set @CodError = @@Error
if @CodError <> 0
begin
set @DescError = (select Description from master.dbo.sysmessages
where Error=@CodError)
insert into ERRORES (Proceso, Error, Descripcion) values
(@Proceso, @DescError, 'Insert into BLOQUES_HST_MC Fecha '+cast(@FechaN as
varchar(8))+ ' Nro Bloque ' + cast(@NroBloque as varchar(2)))
return
end
select @Segundos=@Segundos+@AX_Intervalo
end
select @Fecha=dateadd(d,1,@Fecha)
end

insert into CAB
select Plaza, Fecha, Senial, NroBloque, Target,
(sum(Peso*((case when SegHastaB<SegHastaA then SegHastaB else
SegHastaA end) -
(case when SegDesdeB>SegDesdeA then SegDesdeB
else SegDesdeA end) + 1))) * 100 /
((select sum(Peso) from PESOS_TARGETS where
Fecha=VW_AUDI_SAS_HOG_BLQ_TARGET.Fecha and
Target=VW_AUDI_SAS_HOG_BLQ_TARGET.Target) *
(max(SegHastaB) - max(SegDesdeB) + 1)) as Rating
from VW_AUDI_SAS_HOG_BLQ_TARGET where Plaza=@AX_Plaza and Fecha between
@AX_FECHA_DESDE and
@AX_FECHA_HASTA group by Plaza, Fecha, Senial, NroBloque, Target
order by Plaza, Fecha, Senial, NroBloque, Target
set @CodError = @@Error
if @CodError <> 0
begin
set @DescError = (select Description from master.dbo.sysmessages where
Error=@CodError)
insert into ERRORES (Proceso, Error, Descripcion) values (@Proceso,
@DescError, 'Insert into CAB Hogares')
return
end
insert into CAB
select Plaza, Fecha, Senial, NroBloque, Target,
sum(Peso*((case when SegHastaB<SegHastaA then SegHastaB else SegHastaA
end) -
(case when SegDesdeB>SegDesdeA then SegDesdeB
else SegDesdeA end) + 1)) * 100 /
((select sum(Peso) from PESOS_TARGETS where
Fecha=VW_AUDI_SAS_IND_BLQ_TARGET.Fecha and
Target=VW_AUDI_SAS_IND_BLQ_TARGET.Target) *
(max(SegHastaB) - max(SegDesdeB) + 1)) as Rating
from VW_AUDI_SAS_IND_BLQ_TARGET where Plaza=@AX_Plaza and Fecha between
@AX_FECHA_DESDE and
@AX_FECHA_HASTA group by Plaza, Fecha, Senial, NroBloque, Target
order by Plaza, Fecha, Senial, NroBloque, Target
set @CodError = @@Error
if @CodError <> 0
begin
set @DescError = (select Description from master.dbo.sysmessages where
Error=@CodError)
insert into ERRORES (Proceso, Error, Descripcion) values (@Proceso,
@DescError, 'Insert into CAB Individuos')
return
end
insert into CAB
select Plaza, Fecha, Senial, NroBloque, Target,
(sum(Peso*((case when SegHastaB<SegHastaA then SegHastaB else
SegHastaA end) -
(case when SegDesdeB>SegDesdeA then SegDesdeB
else SegDesdeA end) + 1))) * 100 /
((select sum(Peso) from PESOS_TARGETS where
Fecha=VW_AUDI_SAS_AMA_BLQ_TARGET.Fecha and
Target=VW_AUDI_SAS_AMA_BLQ_TARGET.Target) *
(max(SegHastaB) - max(SegDesdeB) + 1)) as Rating
from VW_AUDI_SAS_AMA_BLQ_TARGET where Plaza=@AX_Plaza and Fecha between
@AX_FECHA_DESDE and
@AX_FECHA_HASTA group by Plaza, Fecha, Senial, NroBloque, Target
order by Plaza, Fecha, Senial, NroBloque, Target
set @CodError = @@Error
if @CodError <> 0
begin
set @DescError = (select Description from master.dbo.sysmessages where
Error=@CodError)
insert into ERRORES (Proceso, Error, Descripcion) values (@Proceso,
@DescError, 'Insert into CAB Amas')
return
end
update TARGETS_MC set FechaUltProceso = @AX_FECHA_HASTA
where @AX_FECHA_HASTA between TARGETS_MC.VigDesde and
TARGETS_MC.VigHasta
set @CodError = @@Error
if @CodError <> 0
begin
set @DescError = (select Description from master.dbo.sysmessages where
Error=@CodError)
insert into ERRORES (Proceso, Error, Descripcion) values (@Proceso,
@DescError, 'Update TARGETS_MC')
return
end
GO

Preguntas similare

Leer las respuestas

#1 Alejandro Mesa
02/02/2005 - 16:51 | Informe spam
Gabriel,

Por que no tratas de debug el procedimiento?, puede que el sp se este
quedando en un lazo infinito en el WHILE.

Tengo un comentario y este es que elimines todas las clausulas ORDER BY en
las sentencias:

insert into ...
select ...

SQL server no garantizara que la proxima vez que consulte la tabla, el
resultado venga en el mismo order que se inserto, al menos que uses ORDER BY
otra vez. Le vas a quitar un peso grande al servidor.

insert into FECHAS_TMP
select distinct Fecha from AUDI_SAS_HOGAR where Plaza=@AX_PLAZA and
Fecha between @AX_FECHA_DESDE and @AX_FECHA_HASTA group by
Fecha order by Fecha



No lo tomes a mal, pero el ORDER BY FECHA en el INSERT ... SELECT ...
anterior no tiene sentido. Como este, existen muchos mas en tu sp.


AMB



"Gabriel" wrote:

Hola
tengo un programa en VBasic que llama a varios SP en el sql para calcular
estadisticas.

hay veces que este proceso dura minutos y otras veces horas.

hice un tracert sobre la DB que toca el SP y detecte que el programa se
queda procesando en un SP en particular.

les paso el codigo del SP para ver si alguno tiene una idea de como lo puedo
optimizar.

gracias.



CREATE PROCEDURE SP_CALC_RATING_CABLE @AX_PLAZA smallint,
@AX_FECHA_DESDE int, @AX_FECHA_HASTA int, @AX_INTERVALO int
AS
declare @GBA as smallint
declare @ROS as smallint
declare @CBA as smallint
declare @MZA as smallint
declare @FechaDesde as smalldatetime
declare @FechaHasta as smalldatetime
declare @Fecha as smalldatetime
declare @FechaN as int
declare @Segundos as int
declare @NroBloque as int
declare @CodError int
declare @DescError as nvarchar(100)
declare @Proceso as varchar(30)
select @GBA0
select @ROS 1
select @CBA 2
select @MZA 3
select @Proceso='CALC_RAT_CABLE_'+cast(@AX_PLAZA as varchar(3))
delete from ERRORES where Proceso=@Proceso
truncate table PESOSH_TMP
insert into PESOSH_TMP
select Fecha, Hogar, max(Peso) from AUDI_SAS_HOGAR where
Plaza=@AX_PLAZA and
Fecha between @AX_FECHA_DESDE and @AX_FECHA_HASTA
group by Fecha, Hogar order by Fecha, Hogar
set @CodError = @@Error
if @CodError <> 0
begin
set @DescError = (select Description from master.dbo.sysmessages where
Error=@CodError)
insert into ERRORES (Proceso, Error, Descripcion) values (@Proceso,
@DescError, 'Truncate table PESOSH_TMP')
return
end
truncate table PESOSI_TMP
insert into PESOSI_TMP
select Fecha, Hogar, Individuo, max(Peso) from AUDI_SAS_INDIV where
Plaza=@AX_PLAZA and
Fecha between @AX_FECHA_DESDE and @AX_FECHA_HASTA
group by Fecha, Hogar, Individuo order by Fecha,
Hogar, Individuo
set @CodError = @@Error
if @CodError <> 0
begin
set @DescError = (select Description from master.dbo.sysmessages where
Error=@CodError)
insert into ERRORES (Proceso, Error, Descripcion) values (@Proceso,
@DescError, 'Truncate table PESOSI_TMP')
return
end
truncate table FECHAS_TMP
set @CodError = @@Error
if @CodError <> 0
begin
set @DescError = (select Description from master.dbo.sysmessages where
Error=@CodError)
insert into ERRORES (Proceso, Error, Descripcion) values (@Proceso,
@DescError, 'Truncate table FECHAS_TMP')
return
end
insert into FECHAS_TMP
select distinct Fecha from AUDI_SAS_HOGAR where Plaza=@AX_PLAZA and
Fecha between @AX_FECHA_DESDE and @AX_FECHA_HASTA group by
Fecha order by Fecha
set @CodError = @@Error
if @CodError <> 0
begin
set @DescError = (select Description from master.dbo.sysmessages where
Error=@CodError)
insert into ERRORES (Proceso, Error, Descripcion) values (@Proceso,
@DescError, 'Insert into FECHAS_TMP')
return
end
calcular los pesos de los targets)
truncate table PESOS_TARGETS
set @CodError = @@Error
if @CodError <> 0
begin
set @DescError = (select Description from master.dbo.sysmessages where
Error=@CodError)
insert into ERRORES (Proceso, Error, Descripcion) values (@Proceso,
@DescError, 'Truncate table PESOS_TARGETS')
return
end
if @AX_Plaza=@GBA
begin
insert into PESOS_TARGETS
select F.Fecha as Fecha, T.Target as Target, T.Tipo as Tipo, CH.Hogar
as Hogar, '0' as Individuo, P.Peso as Peso
from FECHAS_TMP as F
inner join TARGETS_MC as T on
F.Fecha between T.VigDesde and T.VigHasta
inner join PESOSH_TMP as P on
P.Fecha=F.Fecha
inner join Produccion.dbo.CAT_HOGAR as CH on
CH.Plaza = T.Plaza and
CH.Fecha = P.Fecha and
CH.Hogar = P.Hogar and
CH.PuntosAAM between T.PuntosDesde and T.PuntosHasta
where T.Plaza=@AX_PLAZA and T.Tipo='H' order by Fecha, Target, Hogar
set @CodError = @@Error
if @CodError <> 0
begin
set @DescError = (select Description from master.dbo.sysmessages
where Error=@CodError)
insert into ERRORES (Proceso, Error, Descripcion) values (@Proceso,
@DescError, 'Insert into PESOS_TARGETS Hogares')
return
end
insert into PESOS_TARGETS
select F.Fecha as Fecha, T.Target as Target, T.Tipo as Tipo, CH.Hogar
as Hogar, CI.Boton as Individuo, P.Peso as Peso
from FECHAS_TMP as F
inner join TARGETS_MC as T on
F.Fecha between T.VigDesde and T.VigHasta
inner join PESOSI_TMP as P on
P.Fecha = F.Fecha
inner join Produccion.dbo.CAT_HOGAR as CH on
CH.Plaza = T.Plaza and
CH.Fecha = P.Fecha and
CH.Hogar = P.Hogar and
CH.PuntosAAM between T.PuntosDesde and T.PuntosHasta
inner join Produccion.dbo.CAT_INDIV as CI on
CI.Plaza = T.Plaza and
CI.Fecha = P.Fecha and
CI.Hogar = P.Hogar and
CI.Boton = P.Individuo and
CI.Edad between T.EdadDesde and T.EdadHasta and
(CI.Sexo = T.Sexos or T.Sexos = 3)
where T.Plaza=@AX_PLAZA and T.Tipo='I' order by Fecha, Target, Hogar,
Individuo
set @CodError = @@Error
if @CodError <> 0
begin
set @DescError = (select Description from master.dbo.sysmessages
where Error=@CodError)
insert into ERRORES (Proceso, Error, Descripcion) values (@Proceso,
@DescError, 'Insert into PESOS_TARGETS Individuos')
return
end
insert into PESOS_TARGETS
select F.Fecha as Fecha, T.Target as Target, T.Tipo as Tipo, CH.Hogar
as Hogar, CI.Boton as Individuo, P.Peso as Peso
from FECHAS_TMP as F
inner join TARGETS_MC as T on
F.Fecha between T.VigDesde and T.VigHasta
inner join PESOSI_TMP as P on
P.Fecha = F.Fecha
inner join Produccion.dbo.CAT_HOGAR as CH on
CH.Plaza = T.Plaza and
CH.Fecha = P.Fecha and
CH.Hogar = P.Hogar and
CH.PuntosAAM between T.PuntosDesde and T.PuntosHasta
inner join Produccion.dbo.CAT_INDIV as CI on
CI.Plaza = T.Plaza and
CI.Fecha = P.Fecha and
CI.Hogar = P.Hogar and
CI.Boton = P.Individuo and
CI.Edad between T.EdadDesde and T.EdadHasta
where T.Plaza=@AX_PLAZA and T.Tipo='A' and CI.Ama=1 order by Fecha,
Target, Hogar, Individuo
set @CodError = @@Error
if @CodError <> 0
begin
set @DescError = (select Description from master.dbo.sysmessages
where Error=@CodError)
insert into ERRORES (Proceso, Error, Descripcion) values (@Proceso,
@DescError, 'Insert into PESOS_TARGETS Amas')
return
end
end
if (@AX_Plaza=@ROS) or (@AX_Plaza=@CBA) or (@AX_Plaza=@MZA)
begin
insert into PESOS_TARGETS
select F.Fecha as Fecha, T.Target as Target, T.Tipo as Tipo, P.Hogar as
Hogar, '0' as Individuo, P.Peso as Peso
from FECHAS_TMP as F
inner join TARGETS_MC as T on
F.Fecha between T.VigDesde and T.VigHasta
inner join PESOSH_TMP as P on
P.Fecha=F.Fecha
inner join ProduccionInterior.dbo.CAT_HOGAR as CH on
CH.Plaza = T.Plaza and
CH.Fecha =
((year(dateadd(d,((1-(P.Hogar%10))*7),cast(substring(cast(F.Fecha as
varchar(8)),5,2)+'/'+right(cast(F.Fecha as
varchar(8)),2)+'/'+left(cast(F.Fecha as varchar(8)),4) as datetime)))*10000+

month(dateadd(d,((1-(P.Hogar%10))*7),cast(substring(cast(F.Fecha as
varchar(8)),5,2)+'/'+right(cast(F.Fecha as
varchar(8)),2)+'/'+left(cast(F.Fecha as varchar(8)),4) as datetime)))*100+

day(dateadd(d,((1-(P.Hogar%10))*7),cast(substring(cast(F.Fecha as
varchar(8)),5,2)+'/'+right(cast(F.Fecha as
varchar(8)),2)+'/'+left(cast(F.Fecha as varchar(8)),4) as datetime)))))
and
CH.Hogar = (P.Hogar/10) and
CH.PuntosAAM between T.PuntosDesde and T.PuntosHasta
where T.Plaza=@AX_PLAZA and T.Tipo='H' order by Fecha, Target, Hogar
set @CodError = @@Error
if @CodError <> 0
begin
set @DescError = (select Description from master.dbo.sysmessages where
Error=@CodError)
insert into ERRORES (Proceso, Error, Descripcion) values (@Proceso,
@DescError, 'Insert into PESOS_TARGETS Hogares')
return
end
insert into PESOS_TARGETS
select F.Fecha as Fecha, T.Target as Target, T.Tipo as Tipo, P.Hogar as
Hogar, P.Individuo as Individuo, P.Peso as Peso
from FECHAS_TMP as F
inner join TARGETS_MC as T on
F.Fecha between T.VigDesde and T.VigHasta
inner join PESOSI_TMP as P on
P.Fecha = F.Fecha
inner join ProduccionInterior.dbo.CAT_HOGAR as CH on
CH.Plaza = T.Plaza and
CH.Fecha =
((year(dateadd(d,((1-(P.Hogar%10))*7),cast(substring(cast(F.Fecha as
varchar(8)),5,2)+'/'+right(cast(F.Fecha as
varchar(8)),2)+'/'+left(cast(F.Fecha as varchar(8)),4) as datetime)))*10000+

month(dateadd(d,((1-(P.Hogar%10))*7),cast(substring(cast(F.Fecha as
varchar(8)),5,2)+'/'+right(cast(F.Fecha as
varchar(8)),2)+'/'+left(cast(F.Fecha as varchar(8)),4) as datetime)))*100+

day(dateadd(d,((1-(P.Hogar%10))*7),cast(substring(cast(F.Fecha as
varchar(8)),5,2)+'/'+right(cast(F.Fecha as
varchar(8)),2)+'/'+left(cast(F.Fecha as varchar(8)),4) as datetime)))))
and
CH.Hogar = (P.Hogar/10) and
CH.PuntosAAM between T.PuntosDesde and T.PuntosHasta
inner join ProduccionInterior.dbo.CAT_INDIV as CI on
CI.Plaza = T.Plaza and
CI.Fecha = CH.Fecha and
CI.Hogar = (P.Hogar/10) and
CI.Boton = P.Individuo and
CI.Edad between T.EdadDesde and T.EdadHasta and
(CI.Sexo = T.Sexos or T.Sexos = 3)
where T.Plaza=@AX_PLAZA and T.Tipo='I' order by Fecha, Target, Hogar,
Individuo
set @CodError = @@Error
if @CodError <> 0
begin
set @DescError = (select Description from master.dbo.sysmessages
where Error=@CodError)
insert into ERRORES (Proceso, Error, Descripcion) values (@Proceso,
@DescError, 'Insert into PESOS_TARGETS Individuos')
return
end
insert into PESOS_TARGETS
select F.Fecha as Fecha, T.Target as Target, T.Tipo as Tipo, P.Hogar as
Hogar, P.Individuo as Individuo, P.Peso as Peso
from FECHAS_TMP as F
inner join TARGETS_MC as T on
F.Fecha between T.VigDesde and T.VigHasta
inner join PESOSI_TMP as P on
P.Fecha = F.Fecha
inner join ProduccionInterior.dbo.CAT_HOGAR as CH on
CH.Plaza = T.Plaza and
CH.Fecha =
((year(dateadd(d,((1-(P.Hogar%10))*7),cast(substring(cast(F.Fecha as
varchar(8)),5,2)+'/'+right(cast(F.Fecha as
varchar(8)),2)+'/'+left(cast(F.Fecha as varchar(8)),4) as datetime)))*10000+

month(dateadd(d,((1-(P.Hogar%10))*7),cast(substring(cast(F.Fecha as
varchar(8)),5,2)+'/'+right(cast(F.Fecha as
varchar(8)),2)+'/'+left(cast(F.Fecha as varchar(8)),4) as datetime)))*100+

day(dateadd(d,((1-(P.Hogar%10))*7),cast(substring(cast(F.Fecha as
varchar(8)),5,2)+'/'+right(cast(F.Fecha as
varchar(8)),2)+'/'+left(cast(F.Fecha as varchar(8)),4) as datetime)))))
and
CH.Hogar = (P.Hogar/10) and
CH.PuntosAAM between T.PuntosDesde and T.PuntosHasta
inner join ProduccionInterior.dbo.CAT_INDIV as CI on
CI.Plaza = T.Plaza and
CI.Fecha = CH.Fecha and
CI.Hogar = (P.Hogar/10) and
CI.Boton = P.Individuo and
CI.Edad between T.EdadDesde and T.EdadHasta
where T.Plaza=@AX_PLAZA and T.Tipo='A' and CI.Ama=1 order by Fecha,
Target, Hogar, Individuo
set @CodError = @@Error
if @CodError <> 0
begin
set @DescError = (select Description from master.dbo.sysmessages
where Error=@CodError)
insert into ERRORES (Proceso, Error, Descripcion) values (@Proceso,
@DescError, 'Insert into PESOS_TARGETS Amas')
return
end
end

trabajar; BLOQUES_HST_MC historico de McCann)
select @FechaDesde=cast(cast((@AX_Fecha_Desde/10000) as varchar(4))+'/'+
cast(((@AX_Fecha_Desde %
10000)/100) as varchar(4)) + '/' +
cast((@AX_Fecha_Desde%100) as
varchar(4)) as smalldatetime)
select @FechaHasta=cast(cast((@AX_Fecha_Hasta/10000) as varchar(4))+'/'+
cast(((@AX_Fecha_Hasta %
10000)/100) as varchar(4)) + '/' +
cast((@AX_Fecha_Hasta%100) as
varchar(4)) as smalldatetime)
truncate table BLOQUES
set @CodError = @@Error
if @CodError <> 0
begin
set @DescError = (select Description from master.dbo.sysmessages where
Error=@CodError)
insert into ERRORES (Proceso, Error, Descripcion) values (@Proceso,
@DescError, 'Truncate BLOQUES')
return
end
delete from BLOQUES_HST_MC where Plaza=@AX_PLAZA and Fecha between
@AX_Fecha_Desde and @AX_Fecha_Hasta
set @CodError = @@Error
if @CodError <> 0
begin
set @DescError = (select Description from master.dbo.sysmessages where
Error=@CodError)
insert into ERRORES (Proceso, Error, Descripcion) values (@Proceso,
@DescError, 'Delete from BLOQUES_HST_MC')
return
end
select @Fecha = @FechaDesde
while @Fecha <= @FechaHasta
begin
select @Segundos!600
select @NroBloque=0
select @FechaN=year(@Fecha)*10000+month(@Fecha)*100+day(@Fecha)
while @Segundos < 108000
begin
select @NroBloque=@NroBloque+1
insert into BLOQUES (Plaza, Fecha, NroBloque, SegDesde, SegHasta)
values (@AX_Plaza, @FechaN, @NroBloque, @Segundos,
(@Segundos+@AX_Intervalo))
set @CodError = @@Error
if @CodError <> 0
begin
set @DescError = (select Description from master.dbo.sysmessages
where Error=@CodError)
insert into ERRORES (Proceso, Error, Descripcion) values
(@Proceso, @DescError, 'Insert into BLOQUES Fecha '+cast(@FechaN as
varchar(8))+ ' Nro Bloque ' + cast(@NroBloque as varchar(2)))
return
end
insert into BLOQUES_HST_MC (Plaza, Fecha, NroBloque, SegDesde,
SegHasta)
values (@AX_Plaza, @FechaN, @NroBloque, @Segundos,
(@Segundos+@AX_Intervalo))
set @CodError = @@Error
if @CodError <> 0
begin
set @DescError = (select Description from master.dbo.sysmessages
where Error=@CodError)
insert into ERRORES (Proceso, Error, Descripcion) values
(@Proceso, @DescError, 'Insert into BLOQUES_HST_MC Fecha '+cast(@FechaN as
varchar(8))+ ' Nro Bloque ' + cast(@NroBloque as varchar(2)))
return
end
select @Segundos=@Segundos+@AX_Intervalo
end
select @Fecha=dateadd(d,1,@Fecha)
end

insert into CAB
select Plaza, Fecha, Senial, NroBloque, Target,
(sum(Peso*((case when SegHastaB<SegHastaA then SegHastaB else
SegHastaA end) -
(case when SegDesdeB>SegDesdeA then SegDesdeB
else SegDesdeA end) + 1))) * 100 /
((select sum(Peso) from PESOS_TARGETS where
Fecha=VW_AUDI_SAS_HOG_BLQ_TARGET.Fecha and
Target=VW_AUDI_SAS_HOG_BLQ_TARGET.Target) *
(max(SegHastaB) - max(SegDesdeB) + 1)) as Rating
from VW_AUDI_SAS_HOG_BLQ_TARGET where Plaza=@AX_Plaza and Fecha between
@AX_FECHA_DESDE and
@AX_FECHA_HASTA group by Plaza, Fecha, Senial, NroBloque, Target
order by Plaza, Fecha, Senial, NroBloque, Target
set @CodError = @@Error
if @CodError <> 0
begin
set @DescError = (select Description from master.dbo.sysmessages where
Error=@CodError)
insert into ERRORES (Proceso, Error, Descripcion) values (@Proceso,
@DescError, 'Insert into CAB Hogares')
return
end
insert into CAB
select Plaza, Fecha, Senial, NroBloque, Target,
sum(Peso*((case when SegHastaB<SegHastaA then SegHastaB else SegHastaA
end) -
(case when SegDesdeB>SegDesdeA then SegDesdeB
else SegDesdeA end) + 1)) * 100 /
((select sum(Peso) from PESOS_TARGETS where
Fecha=VW_AUDI_SAS_IND_BLQ_TARGET.Fecha and
Target=VW_AUDI_SAS_IND_BLQ_TARGET.Target) *
(max(SegHastaB) - max(SegDesdeB) + 1)) as Rating
from VW_AUDI_SAS_IND_BLQ_TARGET where Plaza=@AX_Plaza and Fecha between
@AX_FECHA_DESDE and
@AX_FECHA_HASTA group by Plaza, Fecha, Senial, NroBloque, Target
order by Plaza, Fecha, Senial, NroBloque, Target
set @CodError = @@Error
if @CodError <> 0
begin
set @DescError = (select Description from master.dbo.sysmessages where
Error=@CodError)
insert into ERRORES (Proceso, Error, Descripcion) values (@Proceso,
@DescError, 'Insert into CAB Individuos')
return
end
insert into CAB
select Plaza, Fecha, Senial, NroBloque, Target,
(sum(Peso*((case when SegHastaB<SegHastaA then SegHastaB else
SegHastaA end) -
(case when SegDesdeB>SegDesdeA then SegDesdeB
else SegDesdeA end) + 1))) * 100 /
((select sum(Peso) from PESOS_TARGETS where
Fecha=VW_AUDI_SAS_AMA_BLQ_TARGET.Fecha and
Target=VW_AUDI_SAS_AMA_BLQ_TARGET.Target) *
(max(SegHastaB) - max(SegDesdeB) + 1)) as Rating
from VW_AUDI_SAS_AMA_BLQ_TARGET where Plaza=@AX_Plaza and Fecha between
@AX_FECHA_DESDE and
@AX_FECHA_HASTA group by Plaza, Fecha, Senial, NroBloque, Target
order by Plaza, Fecha, Senial, NroBloque, Target
set @CodError = @@Error
if @CodError <> 0
begin
set @DescError = (select Description from master.dbo.sysmessages where
Error=@CodError)
insert into ERRORES (Proceso, Error, Descripcion) values (@Proceso,
@DescError, 'Insert into CAB Amas')
return
end
update TARGETS_MC set FechaUltProceso = @AX_FECHA_HASTA
where @AX_FECHA_HASTA between TARGETS_MC.VigDesde and
TARGETS_MC.VigHasta
set @CodError = @@Error
if @CodError <> 0
begin
set @DescError = (select Description from master.dbo.sysmessages where
Error=@CodError)
insert into ERRORES (Proceso, Error, Descripcion) values (@Proceso,
@DescError, 'Update TARGETS_MC')
return
end
GO

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