En varias oportunidades podemos tener la necesidad de depurar alguna tabla grande, esta operación puede ser compleja y hasta impactar la performance de tu base de datos.
En el siguiente tutorial te muestro paso a paso cómo podes hacer un proceso para mover registros viejos a una tabla de historia afectando lo menos posible la performance de tu SQL.
Comparto también el código utilizado en dicho video tutorial
USE master
GO
DROP DATABASE DATOS
DROP DATABASE DATOS_HISTORY
CREATE DATABASE DATOS
CREATE DATABASE DATOS_HISTORY
USE DATOS
GO
-- CREAMOS UNA TABLA Y LA LLENAMOS CON 4M DE REGISTROS
SELECT TOP 4000000
H.AccountNumber,
h.BillToAddressID,
h.CustomerID,
h.OrderDate,
h.SalesOrderNumber,
h.TotalDue
INTO DBO.VENTAS FROM AdventureWorks2019.Sales.SalesOrderHeader H
CROSS JOIN AdventureWorks2019.sys.columns C
-- CREAMOS A LA BASE HISTORY LA TABLA VACIA
USE DATOS_HISTORY
GO
SELECT TOP 0 * INTO DBO.VENTAS FROM DATOS.DBO.VENTAS
USE DATOS
GO
-- CALCULAMOS LAS ORDENES MENORES A 2007
SELECT COUNT(1)
FROM DBO.VENTAS
WHERE OrderDate >= '20130101' and OrderDate < '20140101'
SELECT COUNT(1)
FROM DBO.VENTAS
use DATOS
DBCC TRACEON (1224) -- NO ESCALAN LOS LOKEOS PARA ESTA SESION
WHILE 1 = 1
BEGIN
DELETE TOP (50000) FROM DBO.VENTAS
OUTPUT
Deleted.AccountNumber,
Deleted.BillToAddressID,
Deleted.CustomerID,
Deleted.OrderDate,
Deleted.SalesOrderNumber,
Deleted.TotalDue
INTO DATOS_HISTORY.dbo.VENTAS
WHERE OrderDate >= '20130101'
and OrderDate < '20140101'
IF @@ROWCOUNT = 0 BREAK;
END;
SELECT COUNT(1) FROM DBO.VENTAS
SELECT COUNT(1) FROM DATOS_HISTORY.DBO.VENTAS