jueves, 24 de octubre de 2013

Problemas con Inserción desde Procedimientos almacenados al recuperar las claves o cuando usar @@identity Scope_Identity() o Ident_Current()

Buenas a tod@s

Hoy voy a contaros un par de cosillas de los procedimiento almacenados que os puede ser de gran utilidad. Muchas veces, nosotros manejamos la base de datos a través de procedimientos almacenados, ya que es más seguro, ofrece buenas herramientas de análisis, separamos el grueso de acceso a datos del resto de aplicación, permite que modifiquemos sentencias sin tener que generar una nueva publicación… y cualquier otra razón que a vosotros os guste más.

Uno de los problemas que nos enfrentamos a la hora de insertar un nuevo registro, es al devolver la clave del registro insertado, ya que este puede ser que asigne de forma automática. Muchos de nosotros utilizamos el parámetro @@identity para este fin, pero puede que no sea buena idea, ya que es posible que no devuelva en índice correcto.

Existe tres formas de obtener la clave y cada una tiene sus particularidades:
Scope_Identity(): Devuelve  la clave de la última inserción dentro del procedimiento almacenado en el que lo estamos ejecutando.
@@Identity: Devuelve la clave de la última inserción, a nivel de sesión. Esto quiere decir que si después de la inserción se ejecuta un trigger, al recuperar el valor de la clave, devolverá la clave del trigger y no la del procedimiento almacenado donde lo ejecutamos.
Ident_Current(): Devuelve la última clave introducida sin tener en cuenta sesiones. Es decir, si por ejemplo estamos introduciendo datos con dos usuarios a la vez devolverá la clave de la última inserción independientemente del usuario que lo haya insertado. Es probable que ambos reciban el mismo valor si la inserción ha sido simultánea.

Como podéis comprobar, cada una de las funciones está delimitada de una forma muy concreta. Es posible que para ciertos casos nos interese una u otra, eso tendremos que verlo en su contexto. Lo que está claro es que en muchos casos utilizamos @@identity cuando no es correcto y puede producir un gran problema de coherencia en los datos.

La información a sigo extraída de http://technet.microsoft.com/es-es/library/ms187342.aspx

Espero que este tema haya resultado interesante, no muy aburrido, que ahorre un susto a más de uno y sobre todo que sirva para algo.

Muy importante, si decides comentar o republicar parte de este articulo porque te ha sido útil, por favor cita la fuente y el autor del mismo (vamos cítame) y pon un enlace al artículo de mi blog

Muchas gracias por leerme.
Saludetes a todos

P.D. Podéis seguirme en Twitter @jberron y LinkedIn



No hay comentarios: