Saltar al contenido

Bulk DELETE en SQL Server 2008 (¿Hay algo como Bulk Copy (bcp) para eliminar datos?)

Solución:

No.

Quiere un DELETE con una cláusula WHERE: esto es SQL estándar.

Lo que puede hacer es eliminar por lotes como este:

SELECT 'Starting' --sets @@ROWCOUNT
WHILE @@ROWCOUNT <> 0
    DELETE TOP (xxx) MyTable WHERE ...

O si desea eliminar un porcentaje muy alto de filas …

SELECT col1, col2, ... INTO #Holdingtable
           FROM MyTable WHERE ..opposite condition..
TRUNCATE TABLE MyTable
INSERT MyTable (col1, col2, ...)
           SELECT col1, col2, ... FROM #Holdingtable

Puede hacer un par de cosas si desea eliminar parte de su tabla y no TRUNCATE eso.

puede seleccionar una parte de la tabla en una nueva tabla, luego cambiar las dos, así:

SELECT *
INTO tmp_MyTable
FROM MyTable
WHERE Key='Value'

IF @@ROWCOUNT > 0
BEGIN
    EXEC sp_rename MyTable, old_MyTable, NULL
    EXEC sp_rename tmp_MyTable, MyTable, NULL
    TRUNCATE old_MyTable 
END

En segundo lugar, si está utilizando Particionamiento, puede crear una tabla idéntica (vacía) en el mismo esquema de partición … y si la tabla está particionada de acuerdo con su lógica de archivado / purga, puede mover un bloque de partición de su tabla principal a la nueva tabla y luego truncar la nueva tabla. Por ejemplo:

ALTER TABLE MyTable
SWITCH PARTITION 15 TO purge_MyTable PARTITION 2 
GO; 

TRUNCATE TABLE purge_MyTable 

PD. Las particiones están disponibles en SQL 2005/08 Ent.

¡Espero que esto ayude!

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *