quarta-feira, 30 de março de 2011

Auto-numeração em colunas (IDENTITY) - Parte 2

No último artigo, explorei os aspectos básicos relacionados às colunas auto-numeráveis, neste artigo, aprofundaremos em algumas propriedades e funções relacionadas a este tipo de coluna

Recuperando o valor gerado para uma coluna auto incrementável em uma tabela

Existem situações onde é necessário recuperar o valor gerado pela coluna auto incrementável, ao inserir registros em tabelas relacionadas através de um campo deste tipo, por exemplo.

Para realizar esta tarefa, o SQL Server disponibiliza algumas funções de sistema:
  • @@IDENTITY - Retorna o último valor gerado para o campo IDENTITY independente do escopo, ou seja, se o comando INSERT disparar uma Trigger que realize um novo INSERT sobre esta tabela, a função @@IDENTITY retornará o último valor gerado.
  • SCOPE_IDENTITY() - Retorna o último valor gerado para o campo IDENTITY no escopo atual, ou seja, se o comando INSERT disparar uma Trigger que realize um novo INSERT sobre esta tabela, a função SCOPE_IDENTITY() retornará o valor gerado inicialmente.

  • IDENT_CURRENT( 'tableName' ) - Retorna o último valor gerado para a tabela cujo nome deve ser passado por parâmetro. O valor retornado é independente de escopo ou sessão.

No exemplo abaixo, recuperamos o último valor inserido no campo ID da tabela Pessoa utilizando a função @@IDENTITY:

CREATE TABLE Pessoa
(
    id INT IDENTITY(1,1) PRIMARY KEY,
    nome VARCHAR(50)
)

INSERT INTO Pessoa VALUES ('Evandro')
INSERT INTO Pessoa VALUES ('Mariana')
INSERT INTO Pessoa VALUES ('Regina')
INSERT INTO Pessoa VALUES ('Antonio')

SELECT @@IDENTITY

Veja na figura abaixo o resultado da execução deste script:


Observe que ao consultar o valor de @@IDENTITY, foi retornado o último valor gerado para o campo ID.

As funções IDENT_CURRENT('tablename') e SCOPE_IDENT() podem ser utilizadas da mesma forma. Veja abaixo:

IDENT_CURRENT('tablename'):


SCOPE_IDENTITY():


Aguarde! No próximo artigo veremos como especificar os valores a serem inseridos em um campo IDENTITY e também como definir qual o próximo valor a ser gerado para a coluna.


2 comentários:

Mariana Mazzolani disse...

Muito bom, adorei.

Anônimo disse...

Era exatamente o que eu precisava...
muito obrigado

Postar um comentário