martes, 16 de enero de 2007

SQL - Eliminar multiples registros de una tabla.

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