none
Próximo Indentity RRS feed

  • Pergunta

  • Olá,

    Eu tenho uma tabela chamada TesteTiago, com os campos id int identity, e campo char nome.

    Quando faço insert normalmente, o id vai ser gerado automaticamente pelo identity (número 1). Ótimo!

    Eu queria pegar o próximo identity sem fazer esse insert (número 2), criando um "buraco" na tabela TesteTiago.

    Conseguiram entender o que eu quero?

    terça-feira, 27 de março de 2012 19:17

Todas as Respostas

  • Tiago, boa tarde!

    Meu caro acho que entendi sim o que você quer, você deseja antes de inserir o dado na tabela saber qual o próximo ID. Para isso faça o seguinte: 

    CREATE TABLE tempdb.dbo.DadosSQL 
    (
    	ID INT IDENTITY NOT NULL,
    	Nome VARCHAR(100)
    )
    
    INSERT INTO tempdb.dbo.DadosSQL (Nome)
    VALUES ('Luan Moreno M. Maciel')
    
    SELECT (IDENT_CURRENT('tempdb.dbo.DadosSQL')+1) AS NextID

    Escrevi sobre isso no meu blog, segue - 

    http://luanmorenodba.wordpress.com/2012/02/08/identity-scope_identity-e-ident_currentdiferenas/

    Abs e se útil positive e resposta! 


    Luan.Moreno MTAC | MCP | MTA | MCTS | MCITP SQL Server Administrator / Developer 2008


    terça-feira, 27 de março de 2012 19:22
  • Mas se eu fizer um insert depois do

    SELECT (IDENT_CURRENT('tempdb.dbo.DadosSQL')+1) AS NextID

    vai inserir o id desse select. A partir do momento que eu faço esse select assim, teria que incrementar automaticamente o identity para que o próximo insert já usar o novo número.

    terça-feira, 27 de março de 2012 19:26
  • Tiago, boa tarde!

    Mais se você já tem uma coluna auto incremento para que você deseja inserir um novo ID? A opção identity server justamente para o controle de geração dos números, e por padrão não é possível você realizar a inserção de valores em uma coluna identity. 

    Se desejar inserir manualmente valores dentro da coluna Identity, você precisa habilitar a seguinte opção.

    SET IDENTITY_INSERT NomeTabela ON

    Abs


    Luan.Moreno MTAC | MCP | MTA | MCTS | MCITP SQL Server Administrator / Developer 2008

    terça-feira, 27 de março de 2012 20:09
  • Mas eu não quero inserir novos valores, quero somente o próximo número sem necessidade de fazer insert e incrementar automaticamente a identity.

    Por exemplo, no oracle eu posso usar a sequence para pegar o próximo número, como faria no sql server?

    terça-feira, 27 de março de 2012 20:13
  • Tiago, boa tarde!

    O identity não possibilita esse tipo de opção que você deseja. Não há como você saber o próximo valor da tabela, somente se você realizar 

    SELECT (IDENT_CURRENT('tempdb.dbo.DadosSQL')+1) AS NextID

    Assim você saberá provavelmente qual o próximo valor.

    O sequence é uma estrutura diferente do identity, o sequence é um objeto do banco de dados enquanto o identity é uma opção de tabela, por isso o funcionamento interno deles são diferentes, porém no SQL Server 2012 temos essa nova feature implementada.

    Abs


    Luan.Moreno MTAC | MCP | MTA | MCTS | MCITP SQL Server Administrator / Developer 2008

    terça-feira, 27 de março de 2012 20:37