Nota
O acesso a esta página requer autorização. Pode tentar iniciar sessão ou alterar os diretórios.
O acesso a esta página requer autorização. Pode tentar alterar os diretórios.
Aplica-se a:SQL Server
Azure SQL Database
Azure SQL Managed Instance
Base de dados SQL no Microsoft Fabric
@@IDENTITY é uma função do sistema que devolve o último valor identidade inserido.
Transact-SQL convenções de sintaxe
Sintaxe
@@IDENTITY
Tipos de devolução
numérico(38,0)
Observações
Após a conclusão de uma INSERTinstrução , SELECT INTO, ou copia em massa, contém @@IDENTITY o último valor de identidade gerado pela sentença.
- Se a instrução não afetou nenhuma tabela com colunas identidade,
@@IDENTITYretornaNULL. - Se várias linhas forem inseridas, gerando múltiplos valores identidade,
@@IDENTITYretorna o último valor identidade gerado. - Se a instrução disparar um ou mais disparadores que realizam inserções que geram valores de identidade, a chamada
@@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 numa tabela que tenha uma coluna identidade, e o disparador for inserido noutra tabela que não tem coluna identidade, devolve
@@IDENTITYo valor identidade da primeira inserção. O@@IDENTITYvalor não reverte para uma configuração anterior se aINSERTinstrução ouSELECT INTOa cópia em massa falharem, ou se a transação for revertida.
Extratos e transações falhados podem alterar a identidade atual de uma tabela e criar lacunas nos valores das colunas de identidade. O valor 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 continua a ser 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_IDENTITYdevolver o último valor de identidade gerado em qualquer tabela da sessão atual. No entanto,SCOPE_IDENTITYdevolve o valor apenas dentro do âmbito atual;@@IDENTITYnão está limitado a um âmbito específico.IDENT_CURRENTnão está limitado pelo âmbito e pela sessão; está limitada a uma tabela especificada.IDENT_CURRENTdevolve o valor identidade gerado para uma tabela específica em qualquer sessão e em qualquer escopo. Para mais informações, veja IDENT_CURRENT (Transact-SQL).
O âmbito da @@IDENTITY função é a sessão atual no servidor local onde é executada. Esta função não pode ser aplicada a servidores remotos ou ligados. Para obter um valor de identidade num servidor diferente, execute um procedimento armazenado nesse servidor remoto ou ligado e esse procedimento armazenado (que está a ser executado no contexto do servidor remoto ou ligado) recolha o valor de identidade e o devolve à ligação que chama no servidor local.
A replicação pode afetar o @@IDENTITY valor, uma vez que é usada nos gatilhos de replicação e nos procedimentos armazenados.
@@IDENTITY não é um indicador fiável da identidade mais recente criada pelo utilizador se a coluna fizer parte de um artigo de replicação. Pode usar a SCOPE_IDENTITY() sintaxe da função em vez de @@IDENTITY. Para mais informações, veja SCOPE_IDENTITY (Transact-SQL)
Observação
O procedimento armazenado a chamar ou a instrução Transact-SQL deve ser reescrito para usar a SCOPE_IDENTITY() função, que devolve a identidade mais recente usada dentro do âmbito dessa instrução de utilizador, e não a identidade dentro do âmbito do gatilho aninhado usado pela replicação.
Examples
O exemplo seguinte insere uma linha numa tabela com uma coluna identidade (LocationID) e é usada @@IDENTITY para mostrar o valor 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