none
AYUDA CON IDENTIDAD RRS feed

  • Pregunta

  • Buen dia.

    Espero que puedan ayudarme con este valor identidad que me trae loco.

    Esta es mi tabla ejemplo: tabla (ID int primary key identity,nombre varchar(20)) 

    Lo que pasa es que yo tengo en una tabla llave primaria con valor IDENTIDAD (identity ON)

    1.-Pero al momento de querer hacer una inserción directa, es decir añadiéndole yo el valor NO me lo permite.

    2.-Bueno eso no es todo, tambien tengan una transacción que habrá veces que no se puedan insertar datos a la tabla, es decir ejecuta un rollback entonces lo que veo que hace la identidad es como si hubiera insertado y a la siguiente inserccion inserta otro mas.. algo enredoso xD

    en practica esto es cuando tengo la transaccion.

    Primera inserccion a la tabla por default ID será 1

    insert into tabla (nombre) values ('hola mundo')    <<<<Se inserta tabla (1,'hola mundo')

    insert into tabla (nombre) values ('hola mundo')    <<<<Entra a la transaccion y supongamos que termina en ROLLBACK por tener nombre repetido

    Entonces el ID vale >>>2<<<

    inserto de nuevo con otro nombre:::

    insert into tabla (nombre) values ('hello world')   <<<>>La transaccion termina en comit    

    Entonces al darle select a la tabla esto es lo que me arroja::

    ID  |  nombre 

    1       'hola mundo'

    3        'hello world'

    Espero que esto este un poco mas entendible. como podrán ver en vez de insertar el 2 inserta el 3 y asi sucesivamente mientras entre a rollback la identidad se incremente.

    de antemano gracias.


    Jonathan Perez

    lunes, 16 de abril de 2012 23:13

Respuestas

Todas las respuestas

  • El comportamiento es normal y esperado y es la forma en que trabaja.  Si lo que está buscando es una "solución" a ese "problema", no la encontrará pues no es un problema y por lo tanto no existe la solución puesto que el problema tampoco existe.  Es un inconveniente en términos "estéticos" de los datos, pero funcionalmente no tiene por qué representarle un problema.

    Jose R. MCP

    lunes, 16 de abril de 2012 23:26
  • Como dice el compañero, ese es el comportamiento normal de la propiedad IDENTITY, y es lo que le permite ser tan eficiente en términos de rendimiento.

    Si los requerimientos te impiden que existan huecos en la secuencia, entonces no puedes usar IDENTITY, teniendo entonces que crearte tú mismo un mecanismo para encontrar el siguiente valor a insertar.

    martes, 17 de abril de 2012 8:04
  • Solo como curiosidad. SQL Server 2012 está incorporando el concepto de sequences de acuerdo con los estándares ANSI. Las personas que usan Oracle y que no les gusta el IDENTITY se van a sentir felices ya que eso usan en esa base de datos.

    Acá escribí algo al respecto:

    http://www.sqlservercentral.com/articles/sequence/88422/


    MVP MCT MCTS Daniel Calbimonte

    http://elpaladintecnologico.blogspot.com


    • Editado dani671MVP martes, 17 de abril de 2012 18:32 Mejorar
    • Marcado como respuesta Eder Costa viernes, 20 de abril de 2012 15:26
    martes, 17 de abril de 2012 18:31