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.
OIDENT_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.