Sqlserver
 sql >> Base de Dados >  >> RDS >> Sqlserver

Use IDENT_CURRENT() para retornar o valor de identidade atual em uma coluna de identidade no SQL Server


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.