none
Auto incremment do SQL server 2014 pulando numeros RRS feed

  • Pergunta

  • Auto incremment do SQL server 2014 pulando numeros algo como 42 vai para 1082 depois chega em 1182 pula pra  2089 ja tentei com o -t252 mas nao tive sucesso o problema é que vi isso agora o cliente esta com 299 registros e o id em quase 12000.

    help me please, galera :/
    sexta-feira, 17 de junho de 2016 17:27

Respostas

Todas as Respostas

  • Boa tarde,

    Tiago a inserção dos registros está sendo feito através de alguma aplicação ou direto pelo frontend? 
    Verifique se o indentity está (identity(1,1)).
    O que pode estar acontecendo é que se a inclusão estiver sendo feita pela aplicação, dependendo como você está tratando, ao tentar inserir se der um erro ele utiliza aquele ID mesmo assim. Ou seja, você tentou cadastrar um cliente cuja o próximo "ID" seria 10 se der ou não sucesso, o próximo "ID" será o 11.

    Conseguiu entender?

    Espero ter ajudado.

    Att,


    Se a resposta contribuiu com seu aprendizado por favor marque como util, se solucionou seu problema marque como resposta.

    sexta-feira, 17 de junho de 2016 17:34
  • Exato, verifique como estão os SEEDs dos teus identitys:

    SELECT QUOTENAME(SCHEMA_NAME([t].schema_id))+'.'+QUOTENAME([t].[name]) AS [TableName],
           [c].[name] AS [ColumnName],
           CASE [c].[system_type_id]
               WHEN 127
               THEN 'bigint'
               WHEN 56
               THEN 'int'
               WHEN 52
               THEN 'smallint'
               WHEN 48
               THEN 'tinyint'
           END AS 'DataType',
    	  IDENT_INCR(SCHEMA_NAME([t].schema_id)+'.'+[t].[name])AS 'IDENT_INCR' , 
           IDENT_SEED(SCHEMA_NAME([t].schema_id)+'.'+[t].[name])AS 'INIT_SEED',
           IDENT_CURRENT(SCHEMA_NAME([t].schema_id)+'.'+[t].[name]) AS [CurrentIdentityValue],
           CASE [c].[system_type_id]
               WHEN 127
               THEN(IDENT_CURRENT(SCHEMA_NAME([t].schema_id)+'.'+[t].[name])*100.)/9223372036854775807
               WHEN 56
               THEN(IDENT_CURRENT(SCHEMA_NAME([t].schema_id)+'.'+[t].[name])*100.)/2147483647
               WHEN 52
               THEN(IDENT_CURRENT(SCHEMA_NAME([t].schema_id)+'.'+[t].[name])*100.)/32767
               WHEN 48
               THEN(IDENT_CURRENT(SCHEMA_NAME([t].schema_id)+'.'+[t].[name])*100.)/255
           END AS 'PercentageUsed'
      FROM [sys].[columns] AS [c]
           INNER JOIN [sys].[tables] AS [t] ON [t].[object_id] = [c].[object_id]
     WHERE [c].[is_identity] = 1
     ORDER BY [PercentageUsed] DESC;


    E aproveite e veja se o parametro no startup está mesmo "valendo":

    SELECT *
      FROM [sys].[dm_server_registry]
     WHERE [value_name] LIKE 'SQLArg%';
    
    
    
    
    
    



    Tks. Fausto Fiorese Branco MCTS, MCITP/DBA 2005 | MCITP/DBA 2008 São Paulo - Brasil * http://www.linkedin.com/in/faustobranco

    sexta-feira, 17 de junho de 2016 17:52
  • Boa tarde,

    Da uma olhada na view abaixo, verifica quanto esta o incremento da sua identity.

    select seed_value,increment_value,last_value from sys.identity_columns

    Att

    Reginaldo Silva

    sexta-feira, 17 de junho de 2016 17:53
  • Deleted
    sexta-feira, 17 de junho de 2016 21:05
  • Deleted
    • Marcado como Resposta TiagoJesusTJS quarta-feira, 19 de outubro de 2016 12:59
    sexta-feira, 17 de junho de 2016 21:26
  • Tiago,

    Por isso, uma possibilidade é fazer uso do objeto Sequence implementado no SQL Server a partir da versão 2012, veja se este exemplo poderá lhe ajudar:

    -- Criando uma nova Tabela --
    CREATE TABLE Familia
    (Nomes varchar(15))
    Go
    
    INSERT INTO Familia values
    ('Pedro'), ('Fernanda'), ('Eduardo'), ('João Pedro'), ('Maria Luíza')
    
    -- Criando uma nova Sequência de Valores --
    CREATE SEQUENCE Seq As INT -- Tipo
     START WITH 1 -- Valor Inicial (1)
     INCREMENT BY 1 -- Avança de um em um
     MINVALUE 1 -- Valor mínimo 1
     MAXVALUE 10 -- Valor máximo 10000
     CACHE 10 -- Mantém 10 posições em cache
     NO CYCLE -- Não irá reciclar
    
      -- Utilizando a Sequência de Valores --
    SELECT Next VALUE FOR Seq AS ID, Nomes FROM Familia;
    
    -- Reinicializando a valor da Sequência --
    ALTER Sequence Seq
     RESTART WITH 1 ;
    
       -- Utilizando a Sequência de Valores --
    SELECT Next VALUE FOR Seq AS ID, Nomes FROM Familia;
    
    -- Excluíndo a Sequência --
    Drop Sequence Seq


    Pedro Antonio Galvao Junior [MVP | MCC | Microsoft Evangelist | Microsoft Partner | Engenheiro de Softwares | Especialista em Banco de Dados | Professor Universitario | SoroCodigos | @JuniorGalvaoMVP | http://pedrogalvaojunior.wordpress.com]

    terça-feira, 21 de junho de 2016 17:49
    Moderador
  • desculpem a demora, sou iniciante galera, algumas coisas sao um pouco complexas, mas vou tentar, retorno assim que puder, grande abraço a todos.
    quinta-feira, 23 de junho de 2016 15:11
  • Entendi, mas qual seria a melhor escolha Jose Diz, para  um sistema que tem varios usuarios usando ao mesmo tempo, como mantem os insert OK, quando varios sao chamados 'ao mesmo tempo'?
    quinta-feira, 23 de junho de 2016 15:13
  • o autoincremment esta como  1
    quinta-feira, 23 de junho de 2016 15:14
  • quinta-feira, 23 de junho de 2016 15:16
  • da uma ollhada Fausto
    quinta-feira, 23 de junho de 2016 15:18
  • Olhei la, e o auto increment esta 1,1 sim Silvaney;
    quinta-feira, 23 de junho de 2016 15:19
  • Tiago,

    Teoricamente se você configurou esta coluna para trabalhar com a opção Identity de 1 em 1, normalmente ao fazer os inserts a mesma deveria ser impactada realizando o incremente do dado.

    Você poderia post a estrutura desta table? Se analisarmos a sua imagem que você compartilhou, a coluna não esta configurado para ser incrementada.


    Pedro Antonio Galvao Junior [MVP | MCC | Microsoft Evangelist | Microsoft Partner | Engenheiro de Softwares | Especialista em Banco de Dados | Professor Universitario | SoroCodigos | @JuniorGalvaoMVP | http://pedrogalvaojunior.wordpress.com]

    quinta-feira, 23 de junho de 2016 15:36
    Moderador
  • Deleted
    quinta-feira, 23 de junho de 2016 17:00
  • Deleted
    quinta-feira, 23 de junho de 2016 17:06
  • Pedro, SEQUENCE também não é confiável. Isto é, também pode ocorrer salto na numeração em determinadas situações. Há algumas soluções de contorno, mas que podem degradar a performance.

    Se correr, o bicho pega; se parar, o bicho come! 


        José Diz     Belo Horizonte, MG - Brasil


    José Diz,

    Certo, certo!!! Concordo, mas a questão do Identity é contornavél, na verdade uma forma de implementar o conceito de uma chave candidata "Surrogate Key" não necessitar realmente fazer grandes mudanças na modelagaem.


    Pedro Antonio Galvao Junior [MVP | MCC | Microsoft Evangelist | Microsoft Partner | Engenheiro de Softwares | Especialista em Banco de Dados | Professor Universitario | SoroCodigos | @JuniorGalvaoMVP | http://pedrogalvaojunior.wordpress.com]

    quinta-feira, 23 de junho de 2016 17:48
    Moderador