none
Capturar error de Campo Unique en Sql Server RRS feed

  • Pregunta

  • buenos días, 

    tengo una primera consulta me di cuenta de dos cosas la primer que cuando ocurre un error al insertar en una tabla el campo identity igual se me aumenta, me gustaría que no se aumento creo que debo hacer una transacción o algo por el estilo o es normal que se aumente.

    la segunda consulta es como capturar el error de mi campo unique sql server, 

    he visto este post

    https://social.msdn.microsoft.com/Forums/es-ES/77f68d01-e76b-4a7c-a3e6-837fcc80e83d/arquitectura-capas-manejo-de-errores-validaciones-y-excepciones?forum=vcses

    pero tal vez ahora habrá una mejor solución, 

    agradezco por la colaboración

    Roberto

    viernes, 22 de febrero de 2019 15:19

Respuestas

  • Me temo que tengo malas noticias para ti: Lo del Identity no tiene solución. Incluso aunque lo hagas dentro de una transacción (es mas, de hecho ocurre siempre dentro de una transacción aunque solo sea implicita) el valor del Identity se pierde siempre. SQL Server solo garantiza que el identity es creciente. No esta diesñado para garantizar que sea consecutivo (es decir, que no tenga saltos). Si nececitas que sea consecutivo, tendrás que prescindir del Identity y calcular el campo de otra manera, por ejemplo, haciendo un select MAX y sumando 1 dentro de una transacción.

    La forma sencilla de capturar el error en el UNIQUE es ejecutar la sentencia en un try...catch(SqlException). Si eso no te gusta, podrias llamar a un bloque de sentencias en SQL (posiblemente dentro de un procedimiento almacenado, aunque no es forzoso) que o bien hagan primero un select a ver si el valor existe, o que tenga un try...catch de SQL.

    viernes, 22 de febrero de 2019 15:43
    Moderador