Sqlserver
 sql >> Database >  >> RDS >> Sqlserver

Utilizzare IDENT_CURRENT() per restituire il valore dell'identità corrente su una colonna dell'identità in SQL ServerSQL Server

In SQL Server è possibile utilizzare il IDENT_CURRENT() T-SQL funzione per restituire l'ultimo valore di identità generato per una tabella o una visualizzazione specificata su una colonna di identità. L'ultimo valore di identità generato può essere per qualsiasi sessione e qualsiasi ambito.

Sintassi

La sintassi è questa:

IDENT_CURRENT( 'table_or_view' )

La tabella_o_vista argomento è il nome della tabella o della vista di cui viene restituito il valore di identità.

Esempio 1 – Utilizzo di base

Ecco un esempio di codice di base.

SELECT IDENT_CURRENT('Pets') AS Result;

Risultato:

+----------+
| Result   |
|----------|
| 3        |
+----------+

In questo caso, il valore dell'identità corrente è 3.

Ecco un'altra query che controlla più tabelle.

SELECT 
  IDENT_CURRENT('Pets') AS Pets,
  IDENT_CURRENT('BestFriends') AS BestFriends,
  IDENT_CURRENT('Cities') AS Cities;

Risultato:

+--------+---------------+----------+
| Pets   | BestFriends   | Cities   |
|--------+---------------+----------|
| 3      | 121           | 180      |
+--------+---------------+----------+

Esempio 2 – Incluso lo schema

Puoi anche includere lo schema nell'argomento.

SELECT IDENT_CURRENT('dbo.Pets') AS Result;

Risultato:

+----------+
| Result   |
|----------|
| 3        |
+----------+

Esempio 3 – Dopo un inserimento

In questo esempio, inserisco altre due righe in Pets tabella, quindi seleziona IDENT_CURRENT() di nuovo.

INSERT INTO Pets (PetName)
VALUES ('Brian'), ('Alf');

SELECT IDENT_CURRENT('dbo.Pets') AS Result;

Risultato:

+----------+
| Result   |
|----------|
| 5        |
+----------+

Ecco come appare la tabella:

SELECT * FROM Pets;

Risultato:

+---------+-----------+
| PetId   | PetName   |
|---------+-----------|
| 1       | Homer     |
| 2       | Felix     |
| 3       | Ruff      |
| 4       | Brian     |
| 5       | Alf       |
+---------+-----------+

L'PetId colonna è la colonna identità. Il suo valore seme è 1 e anche il suo valore di incremento è 1.

Vedere Come utilizzare la proprietà IDENTITY() in SQL Server per il codice utilizzato per creare questa tabella.

Esempio 4:verifica di tutte le tabelle nel database

Ecco un esempio di controllo di tutte le tabelle nel database per il loro valore seed di identità.

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;

Risultato:

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

Informazioni sul valore di ritorno

Il valore restituito per IDENT_CURRENT() è numeric(@@MAXPRECISION,0)) . Ciò significa che si tratta di un tipo di dati numerico con una precisione e una scala fisse.

La precisione dipende dal server. Il @@MAXPRECISION argomento restituisce il livello utilizzato dai tipi di dati decimali e numerici come attualmente impostato nel server. La precisione specifica il numero totale massimo di cifre decimali (include quelle a sinistra ea destra del punto decimale).

Il secondo argomento specifica una scala di 0 , il che significa che non ci sono cifre decimali a destra della cifra decimale.

Puoi eseguire la seguente query per trovare il livello di precisione attualmente impostato sul tuo server:

SELECT @@MAX_PRECISION AS [Max Precision];

Ecco il risultato sul mio sistema:

+-----------------+
| Max Precision   |
|-----------------|
| 38              |
+-----------------+

Creazione di una colonna identità

Puoi creare una colonna di identità utilizzando IDENTITY() proprietà nel tuo CREATE TABLE o ALTER TABLE dichiarazione.

Un altro modo per creare una colonna di identità è IDENTITY() funzione. Ciò ti consente di creare una colonna identità quando utilizzi un SELECT INTO dichiarazione per trasferire i dati da una fonte all'altra.

Differenze con @@IDENTITY e SCOPE_IDENTITY()

Il IDENT_CURRENT() la funzione è simile a @@IDENTITY e SCOPE_IDENTITY() , ma ci sono alcune differenze.

@@IDENTITY e SCOPE_IDENTITY() restituisce l'ultimo valore di identità generato in qualsiasi tabella nella sessione corrente. Tuttavia, la differenza tra queste due funzioni è che SCOPE_IDENTITY restituisce il valore solo nell'ambito corrente, mentre @@IDENTITY non è limitato a un ambito specifico.

IDENT_CURRENT() d'altra parte, non è limitato dall'ambito o sessione. Piuttosto, è limitato a una specifica tabella . Restituisce il valore di identità generato per una tabella specifica in qualsiasi sessione e in qualsiasi ambito.

Vedi IDENT_CURRENT vs @@IDENTITY vs SCOPE_IDENTITY in SQL Server:qual è la differenza? per un semplice esempio che illustra le differenze tra queste tre funzioni.