BORRADO MASIVO

26/07/2006 - 18:16 por castilla | Informe spam
Compañeros quiero eliminar datos de un maestro de detalle y del detalle de
años anteriores, y lo hemos planteado por medio de un cursor, pero es muy
pesado ya que son muchos los registros y tarda mucho. Ademas consume mucho
recurso del servidor.
Cual seria la forma mas rapida de poder borrar los datos de ambas tablas de
los años 2002-2003-2004-2005.
Gracias

Preguntas similare

Leer las respuestas

#1 Miguel Egea
26/07/2006 - 18:36 | Informe spam
si hay muchísimos registros algo así podría funcionar

set rowcount 10000
Delete from Tabla where fecha<'2006/01/01'
while @@rowcount>0
Delete from Tabla where fecha<'2006/01/01'
set rowcount 0

(set rowcount no es recomendable si vas a dejarlo programado, pero para una
vez, puedes usarlo).

saludos

"castilla" wrote in message
news:
Compañeros quiero eliminar datos de un maestro de detalle y del detalle de
años anteriores, y lo hemos planteado por medio de un cursor, pero es muy
pesado ya que son muchos los registros y tarda mucho. Ademas consume mucho
recurso del servidor.
Cual seria la forma mas rapida de poder borrar los datos de ambas tablas
de
los años 2002-2003-2004-2005.
Gracias
Respuesta Responder a este mensaje
#2 Miguel Egea
26/07/2006 - 18:42 | Informe spam
se me olvidaba, si no es un problema para tu plan de recuperación, usa el
modo de recuperación sencillo mientras hagas esto, si lo es, acuerdate de
hacer backups del log de transacciones muy muy frecuentemente mientras
lanzas el proceso, si no tu log crecerá y no observarás mucha ventaja.

Saludos
Miguel Egea
"Miguel Egea" wrote in message
news:
si hay muchísimos registros algo así podría funcionar

set rowcount 10000
Delete from Tabla where fecha<'2006/01/01'
while @@rowcount>0
Delete from Tabla where fecha<'2006/01/01'
set rowcount 0

(set rowcount no es recomendable si vas a dejarlo programado, pero para
una vez, puedes usarlo).

saludos

"castilla" wrote in message
news:
Compañeros quiero eliminar datos de un maestro de detalle y del detalle
de
años anteriores, y lo hemos planteado por medio de un cursor, pero es muy
pesado ya que son muchos los registros y tarda mucho. Ademas consume
mucho
recurso del servidor.
Cual seria la forma mas rapida de poder borrar los datos de ambas tablas
de
los años 2002-2003-2004-2005.
Gracias



Respuesta Responder a este mensaje
#3 Alejandro Mesa
26/07/2006 - 19:07 | Informe spam
Castilla,

Es de ayuda si puedes postear la estructura de las tablas. Supongo que
tienes una relacion entre ambas tablas y que ambas tienen clave primaria.
Usare como ejemplo las tablas [orders] y [order details] de la db "northwind".

while exists (
select *
from dbo.orders
where orderdate < '20060101'
)
begin
begin transaction

delete dbo.[order details]
from (
select top 10000 orderid
from dbo.orders
where orderdate < '20060101'
order by orderid -- la tabla orders tiene un indice clustered por orderid
) as t1
where dbo.[order details].orderid = t1.orderid

delete dbo.orders
from (
select top 10000 orderid
from dbo.orders
where orderdate < '20060101'
order by orderid
) as t1
where dbo.orders.orderid = t1.orderid

commit transaction
end

Recuerda manejar los errores.


AMB

"castilla" wrote:

Compañeros quiero eliminar datos de un maestro de detalle y del detalle de
años anteriores, y lo hemos planteado por medio de un cursor, pero es muy
pesado ya que son muchos los registros y tarda mucho. Ademas consume mucho
recurso del servidor.
Cual seria la forma mas rapida de poder borrar los datos de ambas tablas de
los años 2002-2003-2004-2005.
Gracias
Respuesta Responder a este mensaje
#4 castilla
26/07/2006 - 23:40 | Informe spam
Gracias a todos, ya realice las pruebas y el proceso mejoro notablemente.
Gracias, por el intercambio de conocimiento.

"Alejandro Mesa" wrote:

Castilla,

Es de ayuda si puedes postear la estructura de las tablas. Supongo que
tienes una relacion entre ambas tablas y que ambas tienen clave primaria.
Usare como ejemplo las tablas [orders] y [order details] de la db "northwind".

while exists (
select *
from dbo.orders
where orderdate < '20060101'
)
begin
begin transaction

delete dbo.[order details]
from (
select top 10000 orderid
from dbo.orders
where orderdate < '20060101'
order by orderid -- la tabla orders tiene un indice clustered por orderid
) as t1
where dbo.[order details].orderid = t1.orderid

delete dbo.orders
from (
select top 10000 orderid
from dbo.orders
where orderdate < '20060101'
order by orderid
) as t1
where dbo.orders.orderid = t1.orderid

commit transaction
end

Recuerda manejar los errores.


AMB

"castilla" wrote:

> Compañeros quiero eliminar datos de un maestro de detalle y del detalle de
> años anteriores, y lo hemos planteado por medio de un cursor, pero es muy
> pesado ya que son muchos los registros y tarda mucho. Ademas consume mucho
> recurso del servidor.
> Cual seria la forma mas rapida de poder borrar los datos de ambas tablas de
> los años 2002-2003-2004-2005.
> Gracias
email Siga el debate Respuesta Responder a este mensaje
Ads by Google
Help Hacer una preguntaRespuesta Tengo una respuesta
Search Busqueda sugerida