IDENT_CURRENT (Transact-SQL)

Aplica-se a:SQL ServerBanco de Dados SQL do AzureInstância Gerenciada de SQL do AzureBanco de dados SQL no Microsoft Fabric

A IDENT_CURRENT função do sistema retorna o último valor de identidade gerado para uma tabela ou visualização especificada. O valor da última identidade gerado pode ser para qualquer sessão e para qualquer escopo.

Convenções de sintaxe de Transact-SQL

Sintaxe

IDENT_CURRENT( 'table_or_view' )

Argumentos

table_or_view

O nome da tabela ou visualização cujo valor de identidade é retornado. table_name é varchar, sem nenhum padrão.

Tipos de retorno

numeric(@@MAXPRECISION,0))

Exceções

Retorna NULL com 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 itens protegíveis de sua propriedade ou para os quais ele tenha permissão concedida. Isso significa que funções embutidas, emitentes de metadados, IDENT_CURRENT podem retornar NULL se o usuário não tiver permissão sobre o objeto. Para obter mais informações, consulte Metadata Visibility Configuration.

Comentários

IDENT_CURRENTé semelhante às funções SCOPE_IDENTITY de identidade do SQL Server 2000 (8.x) e @@IDENTITY. As três funções retornam valores de identidade gerados por último. Entretanto, o escopo e a sessão nas quais o último está definido em cada uma dessas funções difere:

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

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

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

Ao usar IDENT_CURRENT em uma visualização que contém joins, NULL é retornado. Isso ocorre independentemente de se apenas uma ou mais tabelas unidas possuem 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 plus IDENT_INCR devido às inserções realizadas por outras sessões.

A IDENT_CURRENT função não está disponível para colunas de identidade em Fabric Data Warehouse.

Exemplos

a. Devolva o último valor de identidade gerado para uma tabela especificada

O exemplo a seguir retorna o último valor de identidade gerado para a tabela Person.Address no banco de dados AdventureWorks2025.

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

B. Compare valores de identidade retornados por IDENT_CURRENT, @@IDENTITY e SCOPE_IDENTITY

O exemplo a seguir mostra os valores de identidade diferentes que são retornados 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.*/