none
Salto no deseado en campo autoincremento de sql server 2012 RRS feed

  • Question

  • Tengo un aplicativo que maneja una tabla de despachos la cual tiene el campo despacho como autoincremento. Todo funciona perfecto, pero eventualmente el campo se salta en 1000. Quiero decir, hice un despacho el 1583 y cuando hago otro no inmediatamente sino tiempo después, a veces salta a 2583 y si el usuario no se da cuenta continúa bien.

    La solución que hoy estoy utilizando (no muy válida, pero es lo único que se me ocurre) es deshabilitar el autoincremento en el campo despacho, modificar en la base de datos el valor al que le correspondía (1584) y volver a habilitar el autoincremento.

    No se porqué pasa esto. Como les comento es muy eventual. A veces se demora un mes sin poner problema y luego Crashhhhhhhhhhh el error.

    El front end que utilizo es visual FoxPro 9.0. SP2 y la inserción la hago así:

    "Insert into MiTabla(fecha,cliente,etc..) values (?m.fecha,?m.cliente,etc..)"

    Traigo en número del despacho así:

    "Select @@identity as docx"

    El campo despacho es integer.

    Por favor sus comentarios,

    Salomón 

    Tuesday, August 20, 2013 7:20 PM

Answers

  • Hola. No sé si tu duda es de SQL Server o no. Suponiendo que sea así, lo primero, apunta a que el incremento del identity ese de 1000, tendrías que cambiarlo. Aún así, si tu tabla no admite huecos, un identity no te va a servirá. Si ese es tu caso, nos dices.

    Alberto López Grande
    SQL Server MVP
    Visita mi blog en http://qwalgrande.com
    Sígueme en twitter en http://twitter.com/qwalgrande

    Wednesday, August 21, 2013 11:29 AM
    Moderator
  • Hola OpenSoft, a mi también me paso eso, eso se soluciona activando la trace flag 272, este link me ayudaron a resolverlo:

    http://social.msdn.microsoft.com/Forums/es-ES/586f52d5-3fab-430f-b494-41b0f94e8c9b/id-autonumerico-de-la-tabla-aumenta-demasiado?forum=sqlserveres

    Saludos.

    • Proposed as answer by OpenSoft Friday, July 18, 2014 12:38 AM
    • Unproposed as answer by OpenSoft Friday, July 18, 2014 12:38 AM
    • Proposed as answer by OpenSoft Friday, July 18, 2014 11:19 PM
    • Marked as answer by Alpha Software Technology Sunday, April 10, 2016 2:08 AM
    Thursday, July 17, 2014 7:40 PM

All replies

  • Hola Perdona nose si te entendi muy bien pero puedes ver el incremento desde la propiedad de la tabla saludos

     Ademas si quieres empezar un identity desde el valor que quieras de 0 en adelante aquí hay una query

    DBCC CHECKIDENT (mes, RESEED,12)  

    saludos

    pregunta


    Tuesday, August 20, 2013 9:35 PM
  • Hola Salomón.

    Un gusto encontrar un foxero por estos lugares.

    Los campos autonumericos no se deben usar para llevar la secuencia de documentos, ya que si por x motivo transación se cancela, el campo autonumerico ya aumento su valor.

    Para secuencias de documentos utilizo una tabla donde llevo el valor de la secuencia

    Algo así

    Tabla_secuencia.

    Codigo    Descripcion   Secuencia

    1             Egresos        45

    2             Ingresos       70

    Mediante un SP obtengo el proximo secuencial

    ALTER PROCEDURE [dbo].[MTYSec] @Codigo int, @Decripcion varchar(50), @KeyNext INT OUTPUT AS

    SET NOCOUNT ON
    UPDATE MTYSec SET @KeyNext = Secuencia=Secuencia + 1 Where Codigo = @Codigo
    IF @@ROWCOUNT = 0
       Begin
         Insert Into MTYSec (Codigo, Descripcion, Secuencia) Values(@Codigo, @Decripcion, 1)
         Set @KeyNext = 1
       end

    Para grabar un documento completo utilizo un SP.

    Lo que si me llama la atención es el salto de 1000, revisa tu código.

    Saludos.

    Mauricio

    Tuesday, August 20, 2013 9:54 PM
  • Hola. No sé si tu duda es de SQL Server o no. Suponiendo que sea así, lo primero, apunta a que el incremento del identity ese de 1000, tendrías que cambiarlo. Aún así, si tu tabla no admite huecos, un identity no te va a servirá. Si ese es tu caso, nos dices.

    Alberto López Grande
    SQL Server MVP
    Visita mi blog en http://qwalgrande.com
    Sígueme en twitter en http://twitter.com/qwalgrande

    Wednesday, August 21, 2013 11:29 AM
    Moderator
  • Tengo el mismo problema. En mi caso no tengo inconveniente con algún hueco en el identity por algún error en el insert, el verdadero problema es el salto ocasional de 1000 sin motivo alguno, aunque el incremento de la tabla se encuentre establecido en 1.
    Wednesday, July 16, 2014 12:04 AM
  • Hola gente, el caso mío es el mismo (en SQLServer 2012), con la salvedad de que los saltos son hacia un valor que sigue un patrón. Me explico: Tengo un campo autoincremental, el cual es la clave primaria (primary key) de la tabla y de un tiempo a esta parte empezó a saltarse los valores que debían ser consecutivos.

    de   83223 a   93158 luego hizo otro salto

    de   93345 a 103158 luego

    de 103205 a 113158 luego

    de 113244 a 123158 luego

    de 123205 a 133158 luego

    de 133184 a 143158 luego

    y así sucesivamente. Noten que el salto es siempre a un valor incrementado en 10000 al del valor al que saltó anteriormente.

    Ojalá alguien pueda darnos luces en este tema, ya que vi que otros están pasando por lo mismo. Lo pueden ver en el siguiente link: http://social.msdn.microsoft.com/Forums/es-ES/195bafdf-eb2e-4b7d-aa98-548a043860e7/salto-no-deseado-en-campo-autoincremental?forum=sqlserveres

    Muchas gracias de antemano.


    • Edited by OpenSoft Thursday, July 17, 2014 3:42 AM
    Thursday, July 17, 2014 3:40 AM
  • Hola OpenSoft, a mi también me paso eso, eso se soluciona activando la trace flag 272, este link me ayudaron a resolverlo:

    http://social.msdn.microsoft.com/Forums/es-ES/586f52d5-3fab-430f-b494-41b0f94e8c9b/id-autonumerico-de-la-tabla-aumenta-demasiado?forum=sqlserveres

    Saludos.

    • Proposed as answer by OpenSoft Friday, July 18, 2014 12:38 AM
    • Unproposed as answer by OpenSoft Friday, July 18, 2014 12:38 AM
    • Proposed as answer by OpenSoft Friday, July 18, 2014 11:19 PM
    • Marked as answer by Alpha Software Technology Sunday, April 10, 2016 2:08 AM
    Thursday, July 17, 2014 7:40 PM
  • Muchas gracias Pulita_12, ya hice la configuración propuesta, mañana que entre en producción veremos los resultados y te comentaré.

    Comprobadísimo, luego de hacer la configuración, la generación de códigos consecutivos... sobre ruedas, no hubo más saltos. Muchas gracias otra vez.

    • Edited by OpenSoft Friday, July 18, 2014 11:21 PM
    Friday, July 18, 2014 12:38 AM
  • Paulita_12 muchas gracias. Voy a aplicarlo y pronto te cuento como me va.

    Sunday, April 10, 2016 2:09 AM
  • Hola buen dia, en mi tabla la columna tiene identificado el salto de 1, y me lo hacia perfectamente bien en sql server 2008, pero en sql server 2012, ya me lo hizo en dos tablas que tengo columna como identificado con salto 1, me lo hace de repente, y creo es un bug de sql server, ya que tengo muchos años trabando con la version antigua de sql server y nunca tuve ese problema.

    sugerencia?

    saludos.

    Wednesday, October 10, 2018 5:21 AM
  • Hola alexjavrm:

    Microsoft no garantiza que los campos identity sean consecutivos.

    https://docs.microsoft.com/es-es/sql/t-sql/statements/create-table-transact-sql-identity-property?view=sql-server-2017

    <cite>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 no es aceptable que haya espacios, la aplicación debe usar mecanismos propios para generar valores de clave. El uso de un generador de secuencias con la opción NOCACHE puede limitar los espacios a transacciones que nunca se llevan a cabo</cite>

    Si sigues el post completo, verás que hay una pequeña solución para el flag 272.

    No obstante, recuerda que EL FLAG 272  no garantiza que los valores sean consecutivos nunca.

    Ejemplo:

    CREATE TABLE aIdentity
    (id    INT IDENTITY(1, 1) PRIMARY KEY,
     valor VARCHAR(2)
    );
    GO
    INSERT INTO aIdentity(valor)
    VALUES('a');
    /*inserto un registro */
    SELECT *
    FROM aIdentity;

    Salida

    Segundo bloque:

    BEGIN TRAN;
    INSERT INTO aIdentity(valor)
    VALUES('b');
    /*deshago una transaccion, porque ha ocurrido cualquier tipo de error*/
    ROLLBACK TRAN;
    /* inserto un valor */
    INSERT INTO aIdentity(valor)
    VALUES('c');
    
    SELECT *
    FROM aIdentity;
    GO

    Salida:

    Con deshacer una simple transacción, el registro no es consecutivo.

    Identity verdades y mentiras

    https://javifer2.wordpress.com/2019/10/27/identity-o-autonumerico-verdades-y-mentiras/


    Wednesday, October 10, 2018 6:13 AM
  • a mi me funcionó activando el Flag 272

    1. Open "SQL Server Configuration Manager"
    2. Click "SQL Server Services" on the left pane
    3. Right-click on your SQL Server instance name on the right pane
    4. Click "Properties"
    5. Click "Startup Parameters"
    6. On the "specify a startup parameter" textbox type "-t272"
    7. Click "Add"
    8. Confirm the changes


    Mario Figueroa

    Wednesday, October 10, 2018 8:58 PM
  • Excelente Mario, esto soluciono el impase.

    muchas gracias por tu valioso aporte.

    Friday, January 8, 2021 2:55 PM
  • a mi me funcionó activando el Flag 272

    1. Open "SQL Server Configuration Manager"
    2. Click "SQL Server Services" on the left pane
    3. Right-click on your SQL Server instance name on the right pane
    4. Click "Properties"
    5. Click "Startup Parameters"
    6. On the "specify a startup parameter" textbox type "-t272"
    7. Click "Add"
    8. Confirm the changes


    Mario Figueroa

    Concuerdo contigo Mario, del mismo modo a mi fue lo único que me funcionó, ya que tuve saltos de líneas en varias tablas y entre tantos "consejos" que daban en la web, esta fue la única que realmente ayudó.
    Saturday, January 9, 2021 3:03 PM
  • rapido 

    DBCC CHECKIDENT (TU_TABLA, RESEED, 0)

    Friday, September 16, 2022 9:31 PM