Haz todo lo posible por interpretar el código correctamente antes de adaptarlo a tu trabajo si ttienes algo que aportar puedes comentarlo.
Solución:
No.
Desea un DELETE con una cláusula WHERE: este es SQL estándar.
Lo que puede hacer es eliminar por lotes de esta manera:
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 el particionamiento, puede crear una tabla idéntica (vacía) en el mismo esquema de partición… y si la tabla se particiona de acuerdo con su lógica de archivado/depuración, 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!
Al final de la web puedes encontrar las observaciones de otros usuarios, tú igualmente tienes la libertad de insertar el tuyo si te apetece.