Observação
O acesso a essa página exige autorização. Você pode tentar entrar ou alterar diretórios.
O acesso a essa página exige autorização. Você pode tentar alterar os diretórios.
Aplica-se a:SQL Server
Banco de Dados SQL do
AzureInstância
Gerenciada de SQL do AzureBanco de dados SQL no Microsoft Fabric
@@IDENTITY é uma função do sistema que retorna o último valor de identidade inserido.
Convenções de sintaxe de Transact-SQL
Sintaxe
@@IDENTITY
Tipos de retorno
numeric(38,0)
Comentários
Após a conclusão de uma INSERTinstrução , SELECT INTO, ou copia em massa, contém @@IDENTITY o último valor identidade gerado pela sentença.
- Se a instrução não afetou nenhuma tabela com colunas identidade,
@@IDENTITYretornaNULL. - Se múltiplas linhas forem inseridas, gerando múltiplos valores identidade,
@@IDENTITYretorna o último valor de identidade gerado. - Se a instrução dispara um ou mais gatilhos que realizam inserções que geram valores de identidade, chamar
@@IDENTITYimediatamente após a instrução retorna o último valor de identidade gerado pelos gatilhos. - Se um gatilho for acionado após uma ação de inserção em uma tabela que tenha uma coluna identidade, e o gatilho for inserido em outra tabela que não possui coluna identidade, retorna
@@IDENTITYo valor identidade da primeira inserção. O@@IDENTITYvalor não retorna a uma configuração anterior se aINSERTinstrução ouSELECT INTOcópia em massa falharem, ou se a transação for revertida.
Instruções e transações com falha podem alterar a identidade atual de uma tabela e criar lacunas nos valores da coluna de identidade. O valor de identidade nunca é revertido, mesmo que a transação que tentou inserir o valor na tabela não seja confirmada. Por exemplo, se uma instrução INSERT falhar devido a uma IGNORE_DUP_KEY violação, o valor de identidade atual da tabela ainda é incrementado.
@@IDENTITY, SCOPE_IDENTITY, e IDENT_CURRENT são funções semelhantes porque todas retornam o último valor inserido na IDENTITY coluna de uma tabela.
@@IDENTITYeSCOPE_IDENTITYretorne o último valor de identidade gerado em qualquer tabela da sessão atual. No entanto,SCOPE_IDENTITYretorna o valor apenas dentro do escopo atual;@@IDENTITYnão se limita a um escopo específico.IDENT_CURRENTnão é limitada pelo escopo e pela sessão; Ele é limitado a uma tabela especificada.IDENT_CURRENTretorna o valor de identidade gerado para uma tabela específica em qualquer sessão e qualquer escopo. Para obter mais informações, confira IDENT_CURRENT (Transact-SQL).
O escopo da @@IDENTITY função é a sessão atual no servidor local onde ela é executada. Essa função não pode ser se aplicada a servidores remotos ou vinculados. Para obter um valor de identidade em um servidor diferente, execute um procedimento armazenado no servidor remoto ou vinculado e faça com que esse procedimento (ao ser executado no contexto do servidor remoto ou vinculado) obtenha o valor de identidade e o retorne para a conexão de chamada no servidor local.
A replicação pode afetar o @@IDENTITY valor, pois é usada dentro dos gatilhos de replicação e procedimentos armazenados.
@@IDENTITY não é um indicador confiável da identidade mais recente criada pelo usuário se a coluna fizer parte de um artigo de replicação. Você pode usar a SCOPE_IDENTITY() sintaxe da função em vez de @@IDENTITY. Para obter mais informações, confira SCOPE_IDENTITY (Transact-SQL)
Observação
O procedimento armazenado de chamada ou a instrução Transact-SQL deve ser reescrito para usar a função SCOPE_IDENTITY(), que retorna a última identidade usada dentro do escopo dessa instrução de usuário, e não a identidade dentro do escopo do gatilho aninhado usado pela replicação.
Exemplos
O exemplo a seguir insere uma linha em uma tabela com uma coluna de identidade (LocationID) e usa @@IDENTITY para exibir o valor de identidade usado na nova linha.
USE AdventureWorks2022;
GO
--Display the value of LocationID in the last row in the table.
SELECT MAX(LocationID) FROM Production.Location;
GO
INSERT INTO Production.Location (Name, CostRate, Availability, ModifiedDate)
VALUES ('Damaged Goods', 5, 2.5, GETDATE());
GO
SELECT @@IDENTITY AS 'Identity';
GO
--Display the value of LocationID of the newly inserted row.
SELECT MAX(LocationID) FROM Production.Location;
GO