Вы можете сделать несколько вещей, если хотите удалить часть таблицы, а не TRUNCATE
это.
Вы можете выбрать часть таблицы в новую таблицу, а затем переключить две, например, так:
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
Во-вторых, если вы используете Partitioning, вы можете создать идентичную (пустую) таблицу на той же схеме секционирования ... и если таблица секционируется в соответствии с вашей логикой архивирования / очистки, вы можете переместить один блок секционирования из вашего основной таблицы до новой таблицы, а затем обрезать новую таблицу. Например:
ALTER TABLE MyTable
SWITCH PARTITION 15 TO purge_MyTable PARTITION 2
GO;
TRUNCATE TABLE purge_MyTable
Ps.
Разделы доступны в SQL 2005/08 Ent.
Надеюсь, это поможет!