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.