none
Campo Idendity RRS feed

  • Pergunta

  • ID            CPF                   NOME
    1     28211419844     ANTONIO DA SILVA
    3     282114198443   ANTONIO DA SILVA

    Na tabela acima o campo ID é do tipo identity porém o ID 2 não foi gravado na tabela porque deu um erro de chave primária, quando inseri um novo registro pulou para o 3.

    Alquém sabe como fazer para não pular números no campo identity quando ocorrer erros ????

    Obrigado.

    terça-feira, 18 de agosto de 2009 22:21

Todas as Respostas

  • Olá Eudes,

    Quando você insere outro registro, está deste modo:

    4
    5
    6
    7?

    Se sim, ótimo, segue o comando:
    SET IDENTITY_INSERT [NOME DA TABELA] ON
    INSERT .........
    SET IDENTITY_INSERT [NOME DA TABELA] OFF,

    Se por acaso não ficar satisfeito ou algo relacionado á isto utilize 'TRUNCATE TABLE Tabela', Obrigado.

    []´s

    Lucas Souza
    http://www.souzalucas.spaces.live.com


    LUCAS SOUZA SARAIVA
    quarta-feira, 19 de agosto de 2009 01:35
  • Eudes, a caracteristica do identity é essa mesma, mas se realmente você quiser preencher algum vazio, pode "desligar" o identity da tabela, insere o registro, depois liga novamente. Não acho isso recomendavel, mas se realmente você quiser:


    SET IDENTITY_INSERT sua_tabela On   

    faz os inserts 

    SET IDENTITY_INSERT sua_tabela off


    Há algumas funções para alterar os valores das identitys:

    DBCC CHECKIDENT('sua_tabela')   --ela faz um reset do valor da identity para o próximo valor valido

    DBCC CHECKIDENT('sua_tabela', RESEED, 0)  --Reset na Identity para o valor informado no último parâmetro.




    SELECT IDENT_INCR('sua_tabela') AS 'IDENT_INCR';   --incrementa 1 ao identity e mostra

    SELECT IDENT_CURRENT('sua_tabela') AS Current_Identity;  --mostra o identity atual





    Tks. Fausto Fiorese Branco DBA - SQL Server 2k5 São Paulo - Brasil
    quarta-feira, 19 de agosto de 2009 01:52
  • Olá,

    Como citado pelo Fausto, esse é o comportamento esperado do identity. Caso precise que os números gerados fiquem em seuqncia sem GAPs, procure outra alternativa.

    Segue um exemplo de um GAP com identity:

    create table teste(
    	id int identity(1,1),
    	nome char
    )
    
    insert into teste(nome)values('a')--identity 1
    insert into teste(nome)values('a')--identity 2
    
    select * from teste
    
    begin tran
    	insert into teste(nome)values('a')--identity 3 é perdido
    rollback
    
    --Mesmo dando rollback no comando acima, o identity é perdido
    insert into teste(nome)values('a')--identity 4
    
    select * from teste
    

    Abraços

    Demétrio Silva
    quarta-feira, 19 de agosto de 2009 13:29
  • Campos,

    Isso mesmo, o Fausto esta certo.


    Pedro Antonio Galvão Junior - MVP - Windows Server System - SQL Server/Coordenador de Projetos/DBA
    quarta-feira, 19 de agosto de 2009 19:57