У нас есть журнал активности, который мы обрезаем один раз в месяц. (Мы сохраняем ежемесячные резервные копии, поэтому мы можем вернуться к любым старым данным, если хотим.) Если ваша таблица растет каждый месяц, и вы хотите сохранить ее такой же, как мы, с нашей, вы можете настроить SQL Agent Job для запуска каждый месяц.
Мы удаляем только 5000 строк за раз, чтобы сохранить нагрузку на базу данных, так что эта работа выполняется каждые две минуты в течение часа. Это дает достаточно времени для удаления всех самых старых строк без блокировки базы данных.
DECLARE @LastDate DateTime -- We remove the oldest rows by month
DECLARE @NumberOfRows INT -- Number of rows to keep
-- Set the Date to the current date minus 3 months.
SET @LastDate = DATEADD(MM, -3, GETDATE())
-- Since it runs on the first Saturday of each month, this code gets it
back to the first of the monh.
SET @LastDate = CAST(CAST(DATEPART(YYYY, @LastDate) AS varchar) + '-' + CAST(DATEPART(MM, @LastDate) AS varchar) + '-01' AS DATETIME)
-- We use 5000.
SET @NumberOfRows = 5000
DELETE TOP (@NumberOfRows) FROM MyTable WHERE Created < @LastDate
Вы бы лучше (в крачек лесозаготовок) хранения 78 в временную таблицу затем усечение таблицы и добавить их обратно. Пожалуйста, укажите структуру таблицы и определение 'TOP'. Как по заказу? –
Возможный дубликат [Bulk DELETE на SQL Server 2008 (есть что-то вроде Bulk Copy (bcp) для удаления данных?)] (Http://stackoverflow.com/questions/2126434/bulk-delete-on-sql-server- 2008-is-there-anything-like-bulk-copy-bcp-for-delet) – gbn