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
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)