Sqlserver
 sql >> Base de Dados >  >> RDS >> Sqlserver

Use @@IDENTITY para retornar o último valor de identidade inserido no SQL Server


No SQL Server, você pode usar o T-SQL @@IDENTITY função do sistema para retornar o último valor de identidade inserido na sessão atual.

Observe que ele retorna o último valor de identidade gerado em qualquer tabela na sessão atual . Isso contrasta com o IDENT_CURRENT() função, que retorna o último valor de identidade inserido para uma determinada tabela .

O SCOPE_IDENTITY() função é muito semelhante a @@IDENTITY na medida em que também retorna o último valor de identidade inserido na sessão atual. A diferença é que SCOPE_IDENTITY() está limitado ao escopo atual.


Exemplo 1


Aqui está um exemplo de código básico de @@IDENTITY uso.
SELECT @@IDENTITY AS [Último Valor de Identidade Inserido];

Resultado:
+--------------------------------+| Valor de identidade inserido pela última vez ||--------------------------------|| NULL |+--------------------------------+

O motivo pelo qual isso retorna NULL é porque abri uma nova sessão no SQL Server e ainda não atualizei uma coluna de identidade durante minha sessão atual.

Abaixo está algum código que faz algumas atualizações de coluna de identidade.
CREATE TABLE Cats(id int IDENTITY);CREATE TABLE Dogs(id int IDENTITY);INSERT Cats VALUES DEFAULT;INSERT Cats DEFAULT VALUES;SELECT @@IDENTITY AS [Último valor de identidade inserido];

Resultado:
+--------------------------------+| Valor de identidade inserido pela última vez ||--------------------------------|| 2 |+--------------------------------+

Aqui, crio algumas tabelas, insiro alguns dados e seleciono o valor de identidade atual.

O valor de identidade atual é 2 porque inseri duas linhas nessa tabela.

Agora vamos inserir uma linha na outra tabela:
INSERIR VALORES PADRÃO de cães;SELECIONAR @@IDENTIDADE COMO [Último valor de identidade inserido];

Resultado:
+--------------------------------+| Valor de identidade inserido pela última vez ||--------------------------------|| 1 |+--------------------------------+

O valor retornado é 1, porque esse é o último valor de identidade inserido para esta sessão.

Exemplo 2 – Comparado com IDENT_CURRENT()


Aqui é comparado com IDENT_CURRENT() .
SELECT @@IDENTITY AS [@@IDENTITY], IDENT_CURRENT('Gatos') AS [IDENT_CURRENT('Gatos')], IDENT_CURRENT('Cães') AS [IDENT_CURRENT('Cães')];

Resultado:
+--------------+-------------------------+----- --------------------+| @@IDENTIDADE | IDENT_CURRENT('Gatos') | IDENT_CURRENT('Cães') ||-----------+-------------------------+- ------------------------|| 1 | 2 | 1 |+--------------+-------------------------+------ -------------------+

Como mencionado, IDENT_CURRENT() retorna seu resultado com base na tabela especificada. Portanto, podemos usá-lo para encontrar os últimos valores de identidade para cada tabela.

Exemplo 3 – Mudar para uma nova sessão


Agora, se eu abrir uma nova conexão e selecionar @@IDENTITY novamente, isso é o que acontece:
USE Test;SELECT @@IDENTITY AS [@@IDENTITY], IDENT_CURRENT('Gatos') AS [IDENT_CURRENT('Gatos')], IDENT_CURRENT('Cães') AS [IDENT_CURRENT('Cães')]; 
Resultado:
+--------------+-------------------------+----- --------------------+| @@IDENTIDADE | IDENT_CURRENT('Gatos') | IDENT_CURRENT('Cães') ||-----------+-------------------------+- ------------------------|| NULO | 2 | 1 |+--------------+-------------------------+------ -------------------+

O @@IDENTITY resultado é NULL porque não inseri nada em uma coluna de identidade na nova sessão.

O IDENT_CURRENT() resultados não são NULL, porque seu resultado é baseado na tabela – não na sessão.

@@IDENTITY vs SCOPE_IDENTITY() vs IDENT_CURRENT()


Consulte IDENT_CURRENT vs @@IDENTITY vs SCOPE_IDENTITY no SQL Server:Qual é a diferença? para um exemplo simples que mostra as diferenças entre essas três funções.