Query insert into y Delete

14/10/2005 - 06:20 por Pao | Informe spam
Tengo el siguiente Query: Sin embargo veo que tengo un comportamiento
particular entre:
el insert y el delete, es como si no me tomaran los datos en el mismo orden
pese a que ambos tienen el mismo predicado cuando toma los primeros 10000 en
el insert no son los mismos 10000 para el delete, cosa que a la sgte vuelta o
me dan llaves duplicadas o puedo estar borrado datos que no pase a la tabla
histórica.

Gracias por su ayuda.

insert into sms_procesados_his
select * from sms_procesados
where pr_fecha_pro < dateadd(m,-12,@w_fecha)
order by pr_recibido
*******************
delete sms_procesados
from (select * from sms_procesados
where pr_fecha_pro < dateadd(m,-12,@w_fecha)) as b
where sms_procesados.pr_recibido = b.pr_recibido


declare @w_fecha as datetime,@w_cuenta int,@w_error int
select @w_fecha = getdate()

select count(*) from sms_procesados
where pr_fecha_pro < dateadd(m,-12,@w_fecha)

set rowcount 10000
while (select count(*) from sms_procesados
where pr_fecha_pro < dateadd(m,-12,@w_fecha)) > 0
begin
begin tran
insert into sms_procesados_his
select * from sms_procesados
where pr_fecha_pro < dateadd(m,-12,@w_fecha)
order by pr_recibido

set @w_error = @@error
if @w_error!= 0
begin
rollback tran
end

delete sms_procesados
from (select * from sms_procesados
where pr_fecha_pro < dateadd(m,-12,@w_fecha)) as b
where sms_procesados.pr_recibido = b.pr_recibido


set @w_error = @@error

if @w_error!= 0
begin
rollback tran
end
commit tran

dump tran fsafs with no_log
end
 

Leer las respuestas

#1 Maxi \(MVP SQL\)
15/10/2005 - 19:46 | Informe spam
Hola Pao, podrias probar asi (si es que te entendi bien ;-)

delete sms_procesados where sms_procesados.pr_recibido in (
select * from sms_procesados
where pr_fecha_pro < dateadd(m,-12,@w_fecha))





-
MS-MVP SQL SERVER
"Pao" escribió en el mensaje
news:

Tengo el siguiente Query: Sin embargo veo que tengo un comportamiento
particular entre:
el insert y el delete, es como si no me tomaran los datos en el mismo
orden
pese a que ambos tienen el mismo predicado cuando toma los primeros 10000
en
el insert no son los mismos 10000 para el delete, cosa que a la sgte
vuelta o
me dan llaves duplicadas o puedo estar borrado datos que no pase a la
tabla
histórica.

Gracias por su ayuda.

insert into sms_procesados_his
select * from sms_procesados
where pr_fecha_pro < dateadd(m,-12,@w_fecha)
order by pr_recibido
*******************
delete sms_procesados
from (select * from sms_procesados
where pr_fecha_pro < dateadd(m,-12,@w_fecha)) as b
where sms_procesados.pr_recibido = b.pr_recibido


declare @w_fecha as datetime,@w_cuenta int,@w_error int
select @w_fecha = getdate()

select count(*) from sms_procesados
where pr_fecha_pro < dateadd(m,-12,@w_fecha)

set rowcount 10000
while (select count(*) from sms_procesados
where pr_fecha_pro < dateadd(m,-12,@w_fecha)) > 0
begin
begin tran
insert into sms_procesados_his
select * from sms_procesados
where pr_fecha_pro < dateadd(m,-12,@w_fecha)
order by pr_recibido

set @w_error = @@error
if @w_error!= 0
begin
rollback tran
end

delete sms_procesados
from (select * from sms_procesados
where pr_fecha_pro < dateadd(m,-12,@w_fecha)) as b
where sms_procesados.pr_recibido = b.pr_recibido


set @w_error = @@error

if @w_error!= 0
begin
rollback tran
end
commit tran

dump tran fsafs with no_log
end

Preguntas similares