Foros del Web » Programación para mayores de 30 ;) » Bases de Datos General » SQL Server »

Error en llave primaria

Estas en el tema de Error en llave primaria en el foro de SQL Server en Foros del Web. Hola amigos de foros del Web, tengo un problema con el id llave primaria, estoy utilizando SQL SERVER 2014, tengo una tabla (Contactos) con su ...
  #1 (permalink)  
Antiguo 06/07/2015, 13:05
Avatar de chavo1  
Fecha de Ingreso: diciembre-2014
Ubicación: Querétaro
Mensajes: 55
Antigüedad: 9 años, 5 meses
Puntos: 2
Pregunta Error en llave primaria

Hola amigos de foros del Web, tengo un problema con el id llave primaria, estoy utilizando SQL SERVER 2014, tengo una tabla (Contactos) con su respectivo id
la secuencia es 1,2,3,4,5,6,7, 1004,1005,1006,1007,1008

del id 7 se salta al id 1004....., alguien tiene una idea de por que pasa esto?, espero cualquier comentario al respecto de como corregir esto.

por su ayuda anticipada, Gracias.
  #2 (permalink)  
Antiguo 06/07/2015, 13:37
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 16 años, 5 meses
Puntos: 2658
Respuesta: Error en llave primaria

Puede ser un alter table que redefiniera el ID, o bien que se eliminase un bloque de datos, e incluso que se hayan restaurado datos desde un backup, o que se realizase un INSERT descuidado con un ID superior.
En cualquiera de los casos, es decir, cualquier inserción manual del ID que subiese el numero hasta 1004, hará que los siguientes ID automáticos superen esa cifra.
A priori, es imposible saberlo sin conocer íntegramente tu base y procesos.Tampoco se puede "corregir" porque ya existen muchas inserciones posteriores, y habría que regularizar todo.

Por otro lado, a nivel de identificador, es irrelevante que haya saltos en la numeración...
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #3 (permalink)  
Antiguo 08/07/2015, 12:30
Avatar de Libras
Colaborador
 
Fecha de Ingreso: agosto-2006
Ubicación: En la hermosa perla de occidente
Mensajes: 7.412
Antigüedad: 17 años, 8 meses
Puntos: 774
Respuesta: Error en llave primaria

Estas utilizando campos identity???
__________________
What does an execution plan say to t-sql query? Go f**k yourself, if you are not happy with me
  #4 (permalink)  
Antiguo 08/07/2015, 15:53
Avatar de chavo1  
Fecha de Ingreso: diciembre-2014
Ubicación: Querétaro
Mensajes: 55
Antigüedad: 9 años, 5 meses
Puntos: 2
Respuesta: Error en llave primaria

Antes que todo muchas gracias por tomarse el tiempo para contestar mi pregunta
sobre el error de id primary key

Cita:
Iniciado por Libras Ver Mensaje
Estas utilizando campos identity???
La respuesta es SI Libras el idContacto es integer Primary Key

Gracias gnzsoloyo

Mi base de datos es muy simple, contiene solamente dos tablas, (tContactos y tGrupo) ni siquiera están relacionadas las tablas.

el problema surge cuando regreso al programa y doy de alta a contactos nuevos el idcontacto nuevo se saltó hasta 1004, le corresponeria el idcontacto = 8, en el diseño de la tabla el idcontacto en la especificación de identidad es SI y el incremento es 1 no entiendo por que se salta, anteriormente ya me habia pasado esto con sql 2012 y la solución fué reinicializar la tabla para que quedara como nueva agregando nuevamente los datos de un respaldo hecho antes de borrar los datos y reinicializar a 1 pero el motivo por que se salta ese no lo se y quisiera evitar nuevamente ese tipo de error.

Gracias. un saludo
  #5 (permalink)  
Antiguo 08/07/2015, 16:38
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 16 años, 5 meses
Puntos: 2658
Respuesta: Error en llave primaria

OK.
¿Cómo se realizan los INSERT? ¿A mano o con alguna aplicación que hayas programado?
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #6 (permalink)  
Antiguo 08/07/2015, 17:04
Avatar de Libras
Colaborador
 
Fecha de Ingreso: agosto-2006
Ubicación: En la hermosa perla de occidente
Mensajes: 7.412
Antigüedad: 17 años, 8 meses
Puntos: 774
Respuesta: Error en llave primaria

te pregunte si estas usando un campo identity(Autoincremental), no una llave primaria que son 2 cosas, si te brinco de un valor a otro puede ser que algunas inserciones fueron invalidas.
__________________
What does an execution plan say to t-sql query? Go f**k yourself, if you are not happy with me
  #7 (permalink)  
Antiguo 08/07/2015, 17:14
Avatar de chavo1  
Fecha de Ingreso: diciembre-2014
Ubicación: Querétaro
Mensajes: 55
Antigüedad: 9 años, 5 meses
Puntos: 2
Respuesta: Error en llave primaria

Cita:
Iniciado por gnzsoloyo Ver Mensaje
OK.
¿Cómo se realizan los INSERT? ¿A mano o con alguna aplicación que hayas programado?
Gracias por tu tiempo bnzsoloyo

mira te cuento, es una aplicación en vb en capas, (Datos, Lógica, Presntación, Reportes) tengo procedimientos almacenados para hacer las consultas a sql, como mostrar, nuevo, borrar, editar en una clase con sus respectivas fuenciones. insertar, borrar, editar, etc. los INSERT los realizo desde la función insertar en la capa datos.

intente insertar una imagen aquí pero creo que no se puede, pues dicen que una imagen dice mas que 1000 palabras, y a todo esto, como puedo insertar una imagen?

así de esa manera te puedo mostrar en captura de pantalla los datos.
  #8 (permalink)  
Antiguo 08/07/2015, 17:21
Avatar de chavo1  
Fecha de Ingreso: diciembre-2014
Ubicación: Querétaro
Mensajes: 55
Antigüedad: 9 años, 5 meses
Puntos: 2
Respuesta: Error en llave primaria

Gracias Libras.

Cita:
Iniciado por Libras Ver Mensaje
te pregunte si estas usando un campo identity(Autoincremental), no una llave primaria que son 2 cosas, si te brinco de un valor a otro puede ser que algunas inserciones fueron invalidas.
Tienes razón Libras, No uso campo identity
  #9 (permalink)  
Antiguo 08/07/2015, 17:56
Avatar de Libras
Colaborador
 
Fecha de Ingreso: agosto-2006
Ubicación: En la hermosa perla de occidente
Mensajes: 7.412
Antigüedad: 17 años, 8 meses
Puntos: 774
Respuesta: Error en llave primaria

si no usas indentity, como estas generando los consecutivos?? o de donde obtienes esos consecutivos?
__________________
What does an execution plan say to t-sql query? Go f**k yourself, if you are not happy with me
  #10 (permalink)  
Antiguo 08/07/2015, 19:11
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 16 años, 5 meses
Puntos: 2658
Respuesta: Error en llave primaria

Precisamente el problema viene por ese lado.
Si el campo no es IDENTITY, hay que ver en base a qué genera, y qué causa el salto.
Si es un IDENTITY hay que tener en cuenta también lo que dice el manual de referencia:
Cita:
La propiedad de identidad de una columna no garantiza lo siguiente:

Unicidad del valor: La unicidad debe aplicarse mediante una restricción PRIMARY KEY o UNIQUE, o mediante un índice UNIQUE.

Valores consecutivos en una transacción: No se garantiza que una transacción que inserta varias filas obtenga valores consecutivos para las filas porque podrían producirse otras inserciones simultáneas en la tabla. Si los valores deben ser consecutivos, la transacción debe usar un bloqueo exclusivo en la tabla o usar el nivel de aislamiento SERIALIZABLE.

Valores consecutivos después de un reinicio del servidor u otros errores: SQL Server podría almacenar en memoria caché los valores de identidad por motivos de rendimiento y algunos de los valores asignados podrían perderse durante un error de la base de datos o un reinicio del servidor. Esto puede tener como resultado espacios en el valor de identidad al insertarlo. Si los espacios no son aceptables, la aplicación debe usar un generador de secuencias son la opción NOCACHE o usar su propio mecanismo para generar los valores de clave.

Reutilización de valores: Para una propiedad de identidad determinada, con un valor de inicialización e incremento específico, el motor no reutiliza los valores de identidad. Si una instrucción de inserción concreta produce un error o si la instrucción de inserción se revierte, los valores de identidad utilizados se pierden y no volverán a generarse. Esto puede tener como resultado espacios cuando se generan los valores de identidad siguientes.
Esto quiere decir que hay situaciones en que la continuidad numérica puede ser afectada, sin ser necesariamente un "error".
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)

Etiquetas: tabla
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 08:58.