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
(
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:
Muito bom, adorei.
Era exatamente o que eu precisava...
muito obrigado
Postar um comentário