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.