No SQL Server, você pode usar o T-SQL
IDENT_CURRENT()
função para retornar o último valor de identidade gerado para uma tabela ou exibição especificada em uma coluna de identidade. O último valor de identidade gerado pode ser para qualquer sessão e qualquer escopo. Sintaxe
A sintaxe fica assim:
IDENT_CURRENT( 'table_or_view' )
A table_or_view argumento é o nome da tabela ou exibição cujo valor de identidade é retornado.
Exemplo 1 – Uso básico
Aqui está um exemplo de código básico.
SELECT IDENT_CURRENT('Pets') AS Result;
Resultado:
+----------+ | Result | |----------| | 3 | +----------+
Nesse caso, o valor de identidade atual é 3.
Aqui está outra consulta que verifica mais tabelas.
SELECT IDENT_CURRENT('Pets') AS Pets, IDENT_CURRENT('BestFriends') AS BestFriends, IDENT_CURRENT('Cities') AS Cities;
Resultado:
+--------+---------------+----------+ | Pets | BestFriends | Cities | |--------+---------------+----------| | 3 | 121 | 180 | +--------+---------------+----------+
Exemplo 2 – Incluindo o Esquema
Você também pode incluir o esquema no argumento.
SELECT IDENT_CURRENT('dbo.Pets') AS Result;
Resultado:
+----------+ | Result | |----------| | 3 | +----------+
Exemplo 3 – Após uma inserção
Neste exemplo, insiro mais duas linhas no campo Pets tabela e selecione
IDENT_CURRENT()
novamente. INSERT INTO Pets (PetName) VALUES ('Brian'), ('Alf'); SELECT IDENT_CURRENT('dbo.Pets') AS Result;
Resultado:
+----------+ | Result | |----------| | 5 | +----------+
Veja como fica a tabela:
SELECT * FROM Pets;
Resultado:
+---------+-----------+ | PetId | PetName | |---------+-----------| | 1 | Homer | | 2 | Felix | | 3 | Ruff | | 4 | Brian | | 5 | Alf | +---------+-----------+
O PetId coluna é a coluna de identidade. Seu valor de semente é 1 e seu valor de incremento também é 1.
Consulte Como usar a propriedade IDENTITY() no SQL Server para obter o código usado para criar esta tabela.
Exemplo 4 – Verifique todas as tabelas no banco de dados
Aqui está um exemplo de verificação de todas as tabelas no banco de dados para seu valor de semente de identidade.
SELECT TABLE_SCHEMA, TABLE_NAME, IDENT_CURRENT(TABLE_SCHEMA + '.' + TABLE_NAME) AS IDENT_CURRENT FROM INFORMATION_SCHEMA.TABLES WHERE IDENT_CURRENT(TABLE_SCHEMA + '.' + TABLE_NAME) IS NOT NULL;
Resultado:
+----------------+----------------+-----------------+ | TABLE_SCHEMA | TABLE_NAME | IDENT_CURRENT | |----------------+----------------+-----------------| | dbo | ConstraintTest | 17 | | dbo | Event | 1 | | dbo | Scoreboard | 8 | | dbo | Pets | 5 | | dbo | BestFriends | 121 | | dbo | Cities | 180 | | dbo | Colors | 6 | | dbo | t6 | 1 | | dbo | t7 | 100 | +----------------+----------------+-----------------+
Sobre o valor de retorno
O valor de retorno para
IDENT_CURRENT()
é numeric(@@MAXPRECISION,0))
. Isso significa que é um tipo de dados numérico com precisão e escala fixas. A precisão depende do servidor. O
@@MAXPRECISION
O argumento retorna o nível usado pelos tipos de dados decimais e numéricos conforme definido atualmente no servidor. A precisão especifica o número total máximo de dígitos decimais (inclui os lados esquerdo e direito do ponto decimal). O segundo argumento especifica uma escala de
0
, o que significa que não há dígitos decimais à direita da casa decimal. Você pode executar a seguinte consulta para encontrar o nível de precisão atualmente definido em seu servidor:
SELECT @@MAX_PRECISION AS [Max Precision];
Aqui está o resultado no meu sistema:
+-----------------+ | Max Precision | |-----------------| | 38 | +-----------------+
Criando uma coluna de identidade
Você pode criar uma coluna de identidade usando o
IDENTITY()
propriedade em seu CREATE TABLE
ou ALTER TABLE
demonstração. Outra maneira de criar uma coluna de identidade é o
IDENTITY()
função. Isso permite que você crie uma coluna de identidade ao usar um SELECT INTO
instrução para transferir dados de uma fonte para outra. Diferenças com @@IDENTITY e SCOPE_IDENTITY()
O
IDENT_CURRENT()
função é semelhante a @@IDENTITY
e SCOPE_IDENTITY()
, Mas existem algumas diferenças. @@IDENTITY
e SCOPE_IDENTITY()
retornar o último valor de identidade gerado em qualquer tabela na sessão atual. No entanto, a diferença entre essas duas funções é que SCOPE_IDENTITY
retorna o valor apenas dentro do escopo atual, enquanto @@IDENTITY
não se limita a um escopo específico. IDENT_CURRENT()
por outro lado, não está limitado pelo escopo ou sessão. Em vez disso, é limitado a uma tabela especificada . Ele retorna o valor de identidade gerado para uma tabela específica em qualquer sessão e em qualquer escopo. Consulte IDENT_CURRENT vs @@IDENTITY vs SCOPE_IDENTITY no SQL Server:Qual é a diferença? para um exemplo simples que mostra as diferenças entre essas três funções.