Partilhar via


IDENT_CURRENT (Transact-SQL)

Aplica-se a:SQL ServerAzure SQL DatabaseAzure SQL Managed InstanceBase de dados SQL no Microsoft Fabric

Devolve o último valor de identidade gerado para uma tabela ou vista especificada. O último valor de identidade gerado pode ser para qualquer sessão e qualquer âmbito.

Transact-SQL convenções de sintaxe

Sintaxe

IDENT_CURRENT( 'table_or_view' )  

Arguments

table_or_view
É o nome da tabela ou vista cujo valor de identidade é devolvido. table_or_view é Varchar, sem padrão.

Tipos de devolução

numérico(@@MAXPRECISION,0))

Exceptions

Retorna NULL no erro ou se um chamador não tiver permissão para exibir o objeto.

No SQL Server, um usuário só pode exibir os metadados de protegíveis que o usuário possui ou nos quais o usuário recebeu permissão. Isto significa que funções incorporadas que emitem metadados, como IDENT_CURRENT podem devolver NULL se o utilizador não tiver qualquer permissão sobre o objeto. Para obter mais informações, consulte Configuração de visibilidade de metadados.

Observações

IDENT_CURRENT é semelhante às funções de identidade do SQL Server 2000 (8.x) SCOPE_IDENTITY e @@IDENTITY. As três funções devolvem valores de identidade gerados por último. No entanto, o âmbito e a sessão em que este último é definido em cada uma destas funções diferem:

  • IDENT_CURRENT devolve o último valor de identidade gerado para uma tabela específica em qualquer sessão e em qualquer escopo.
  • @@IDENTITY devolve o último valor de identidade gerado para qualquer tabela na sessão atual, em todos os escopos.
  • SCOPE_IDENTITY devolve o último valor de identidade gerado para qualquer tabela na sessão atual e o âmbito atual.

Quando o valor IDENT_CURRENT é NULL (porque a tabela nunca conteve linhas ou foi truncada), a função IDENT_CURRENT devolve o valor semente.

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 violação de IGNORE_DUP_KEY, o valor de identidade atual da tabela continua a ser incrementado.

Ao usar IDENT_CURRENT numa vista que contém joins, NULL é devolvido. Isto independentemente de apenas uma ou mais do que uma tabela unida ter uma coluna de Identidade.

Importante

Use cautela ao usar IDENT_CURRENT para prever o próximo valor de identidade gerado. O valor real gerado pode ser diferente do IDENT_CURRENT mais IDENT_INCR devido às inserções realizadas por outras sessões.

Examples

A. Devolver o último valor de identidade gerado para uma tabela especificada

O exemplo seguinte devolve o último valor de identidade gerado para a Person.Address tabela na AdventureWorks2025 base de dados.

USE AdventureWorks2022;  
GO  
SELECT IDENT_CURRENT ('Person.Address') AS Current_Identity;  
GO  

B. Comparação dos valores de identidade devolvidos por IDENT_CURRENT, @@IDENTITY e SCOPE_IDENTITY

O exemplo seguinte mostra os diferentes valores identidade que são devolvidos por IDENT_CURRENT, @@IDENTITY, e SCOPE_IDENTITY.

USE AdventureWorks2022;  
GO  
IF OBJECT_ID(N't6', N'U') IS NOT NULL   
    DROP TABLE t6;  
GO  
IF OBJECT_ID(N't7', N'U') IS NOT NULL   
    DROP TABLE t7;  
GO  
CREATE TABLE t6(id INT IDENTITY);  
CREATE TABLE t7(id INT IDENTITY(100,1));  
GO  
CREATE TRIGGER t6ins ON t6 FOR INSERT   
AS  
BEGIN  
   INSERT t7 DEFAULT VALUES  
END;  
GO  
--End of trigger definition  
  
SELECT id FROM t6;  
--IDs empty.  
  
SELECT id FROM t7;  
--ID is empty.  
  
--Do the following in Session 1  
INSERT t6 DEFAULT VALUES;  
SELECT @@IDENTITY;  
/*Returns the value 100. This was inserted by the trigger.*/  
  
SELECT SCOPE_IDENTITY();  
/* Returns the value 1. This was inserted by the   
INSERT statement two statements before this query.*/  
  
SELECT IDENT_CURRENT('t7');  
/* Returns value inserted into t7, that is in the trigger.*/  
  
SELECT IDENT_CURRENT('t6');  
/* Returns value inserted into t6. This was the INSERT statement four statements before this query.*/  
  
-- Do the following in Session 2.  
SELECT @@IDENTITY;  
/* Returns NULL because there has been no INSERT action   
up to this point in this session.*/  
  
SELECT SCOPE_IDENTITY();  
/* Returns NULL because there has been no INSERT action   
up to this point in this scope in this session.*/  
  
SELECT IDENT_CURRENT('t7');  
/* Returns the last value inserted into t7.*/  

Ver também

@@IDENTITY (Transact-SQL)
SCOPE_IDENTITY (Transact-SQL)
IDENT_INCR (Transact-SQL)
IDENT_SEED (Transact-SQL)
Expressões (Transact-SQL)
Funções do sistema (Transact-SQL)