SQL - Eliminar multiples registros de una tabla.
Muchas veces requerimos eliminar más de un registro y que estos cumplan con una serie de requerimientos. Imaginense tener que eliminar más de 10,000 registros pero que estos cumplan con ciertas especificaciones, para lo cual tenemos que consultar más de dos tablas. Si lo quisieramos realizar de la manera tradicional, es decir, eliminar registro por registro, es seguro que nos llevaria muchisimo tiempo. Una forma rápida, fácil y segura de eliminar los registros es seguir los siguientes pasos:
Ejemplo: Si desearamos eliminar todos los Usuarios de TipoUsuario A y B que pertenezcan a la Empresa 5.
- 1.- Crear nuestra consulta de los registros que deseamos eliminar. Aqui estamos no estamos considerando que otras tablas hagan referencia a los valores que deseamos eliminar. [Verificar que realmente sean los registros que deseamos eliminar]. Si la consulta es muy compleja o se desea hacer en secciones, puede hacerse uso de tablas temporales para almacenar por ejemplo, los Ids de los registros a eliminar, y posteriormente hacer uso de esa tabla temporal como parte de la restriccion para la eliminacion.d
SELECT *
FROM Usuario U
INNER JOIN Departamento D
ON U.DepartamentoId=D.DepartamentoId
INNER JOIN Empresa E
ON D.EmpresaId=E.EmpresaId
WHERE E.EmpresaId=5
AND U.TipoUsuario IN ('A','B')
- 2.-Creamos una transaccion.
BEGIN TRAN
- 3.- Procedemos a eliminar los registros.
DELETE Usuario
-- SELECT *
FROM Usuario U
INNER JOIN Departamento D
ON U.DepartamentoId=D.DepartamentoId
INNER JOIN Empresa E
ON D.EmpresaId=E.EmpresaId
WHERE E.EmpresaId=5
AND U.TipoUsuario IN ('A','B')
- 4.- Verificamos que el total de lineas afectadas hayan coincidan con el total de registros obtenidos en la consulta del paso 1.
Si estamos seguros de eliminar los registros, realizar el commit de la transaccion
COMMIT TRAN
Si no estamos seguros o sucedio un error, realizamos un rollback a la transaccion
ROLLBACK TRAN