Buscar este blog

martes, 30 de noviembre de 2010

Que inserte, actualice o elimine??

Desde hace unos días atrás estoy publicando varias cosas nuevas con respecto a la base de datos MS SQL Server que existían y no lo sabía, y si quizás lo hubiera sabido antes, me hubiera ahorrado muchas horas de codificación o de análisis de cómo sacarle la vuelta a la herramienta.

El día de hoy aprendí que las sentencias insert, update y delete, cuentan con una clausula opcional llamada "OUTPUT", esta clausula es muy útil cuando luego de un insert, uno desea saber que registros fueron afectados por la operación DML.

Para obtener este resultado, antes yo hacia un select antes de la operación y lo guardaba en una tabla temporal y luego utilizaba esta data para hacer otras operaciones, pero esto no es bueno para la performance de la base de datos debido a que se está ejecutando el mismo comando select 2 veces, 1 para guardar los resultados de los registro, y otra vez para ejecutar la operación DML. Otro de los defectos de esta técnica es que hay la posibilidad de que los datos no calcen debido a que en la ejecución del primer select, la base de datos me arroje 3 registros, luego justo antes del insert otra sesión inserta un registro más en la tabla y esto hace que el select que se ejecutara en la sesión original para la operación DML ya no arroje 3 registros sino 4, y entonces nuestra técnica fallo.

No sería bueno que la base de datos nos de la posibilidad de tener los registros afectados por una operación DML, sin afectar la performance y sin la posibilidad de error en el numero de registros. Pues si la hay y es la clausula OUTPUT que tienen todas las operaciones DML (insert, delete, update y merge). Para dar más detalle de esta clausula opcional y su funcionamiento, recomiendo leer este
link que contiene la documentación oficial y es bastante completa.

Bueno espero seguir aportando con característica, funciones, sps, etc. que se encuentran ahí pero aun no los vemos.

No hay comentarios:

Publicar un comentario