Cómo depurar registros de una tabla y moverlos a otra

May 16, 2022 | Performance, SQL 2017, SQL 2019, SQL Server, TSQL | 0 comments

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

Acerca del autor

Maximiliano Accotto

Con mas de 20 años de experiencia y trayectoria trabajando con bases de datos SQL Server y BI.

Fui Microsoft MVP desde el 2005 al 2019 y soy orador frecuente para distintos eventos de Microsoft y comunidades técnicas.

Me especializado en temas de tuning, administracion, performance, diseño y BI en el mundo Microsoft ya sea para ambientes locales como nube.

 

Asesoramiento

¿Necesitas resolver problemas de SQL Server o Micosoft BI?

De ser así te puedo ayudar con mi asesoramiento totalmente personalizado

0 Comments