martes, 16 de enero de 2007

SQL - Recomendaciones

Recomendaciones para su uso en SQL:
  • No hacer uso de sp_ al inicio de los procedimientos almacenados.
  • Cuando realicemos consultas, hacer uso de WITH(NOLOCK) para no bloquear las tablas inecesariamente.
  • Utilizar parámetros de entrada y de salida para procedimientos almacenados.
  • Hacer uso de RETURN cuando vayamos a regresar un valor entero, en lugar de develver ese valor mediante un SELECT.
  • Utilizar transacciones y controlar los errores en los procedimientos almanacenados.
  • Emplear errores personalizados.
Las anteriores son solo recomendaciones y se debe analizar en que momento hacer uso de las mismas.

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