Questo articolo esplora la funzione Identity in SQL Server con esempi e differenze tra queste funzioni.
Panoramica delle colonne IDENTITY
In SQL Server, creiamo una colonna identity per generare automaticamente valori incrementali. Genera valori basati sul valore predefinito seed (valore iniziale) e step (incremento). Ad esempio, supponiamo di avere una tabella Employee e vogliamo generare EmployeeID automaticamente., Abbiamo un ID dipendente iniziale 100 e vogliamo ulteriormente incrementare ogni nuovo EmpID di uno. In questo caso, dobbiamo definire i seguenti valori.
- Seed: 100
- Step: 1
Inseriamo alcuni record in questa tabella e visualizziamo i record.
Puoi vedere che il primo dipendente ottiene un valore ID 100 e ogni nuovo valore ID record ottiene un incremento di uno.
Abbiamo alcune funzioni di identità utili in SQL Server per lavorare con le colonne di IDENTITÀ in una tabella. Esploriamo le seguenti funzioni di identità con esempi.,
- SQL @@IDENTITY Function
- SQL SCOPE_IDENTITY() Function
- SQL IDENT_CURRENT Function
- SQL IDENTITY Function
SQL @@IDENTITY Function
Usiamo system function @@IDENTITY per restituire il valore massimo di IDENTITÀ utilizzato in una tabella per la colonna IDENTITY sotto la sessione corrente. Una volta inserita una riga in una tabella, la colonna della funzione @@IDENTITY fornisce il valore di IDENTITÀ generato dall’istruzione. Se eseguiamo qualsiasi query che non ha generato valori di IDENTITÀ, otteniamo valore NULL nell’output., L’IDENTITÀ SQL @ @ viene eseguita nell’ambito della sessione corrente. Non possiamo usarlo su un server remoto o collegato.
Capiamolo con il seguente esempio.
- Passo 1: Abbiamo un valore di identità massimo corrente 110 nella tabella EmployeeData
- Passo 2: Nella sessione corrente, inseriamo un record nella tabella EmployeeData., Incrementa il valore identity di uno
- Passaggio 3: Possiamo verificare che il valore identity massimo utilizzato sia 111
- Passaggio 4: Usiamo la funzione SELECT @@IDENTITY nella sessione corrente per ottenere il valore identity generato in questa sessione
Inseriamo più record in questa tabella ed eseguiamo SELECT @@IDENTITY.
Se inseriamo più record in una sessione, SELECT @@Identity restituisce il valore massimo di IDENTITÀ generato in questa sessione., Nell’esempio seguente, inseriamo tre record e incrementa i valori di identità di tre dal valore di identità corrente 111.
Se l’istruzione non ha generato alcun valore di identità, restituisce valori NULLI nell’output.
SQL SCOPE_IDENTITY() funzione
Usiamo SCOPE_IDENTITY() funzione per restituire l’ultimo valore di identità in una tabella sotto l’ambito corrente. Un ambito può essere un modulo, un trigger, una funzione o una stored procedure., Possiamo considerare la funzione SQL SCOPE_IDENTITY () simile alla funzione @@IDENTITY, ma è limitata a un ambito specifico. Restituisce il valore NULL se questa funzione è coinvolta prima che un’istruzione insert generi valore nello stesso ambito.
Nell’esempio seguente, vediamo che sia @@IDENTITY che SCOPE_IDENTITY() restituiscono lo stesso valore nella sessione corrente e nell’ambito simile.
Capiamo la differenza tra SCOPE_IDENTITY() e @@IDENTITY con un altro esempio.,
Consideriamo che abbiamo due tabelle EmployeeData e tabella Dipartimenti. Creiamo un trigger INSERT sulla tabella EmployeeData. Una volta inserita una riga su EmployeeData, chiama al trigger definito per l’inserimento di una riga nei reparti.
Nella seguente query, creiamo un trigger per inserire il valore predefinito ‘IT’ nella tabella dipartimenti per ogni inserimento nella tabella EmployeeData.,f7″>
1
2
3
4
5
6
|
CREATE TRIGGER T_INSERT_DEPARTMENT
SU EmployeeData
PER INSERIRE
BEGIN
INSERIRE Dipartimenti VALUES (‘E’)
END;
|
inseriamo il valore del Dipendente dati di tabella e visualizzare l’output di entrambi i @@IDENTITY e SCOPE_IDENTITY() funzioni.,
Nella sessione corrente, abbiamo inserito i dati nella tabella EmployeeData. Genera un’identità in questa tabella. Il valore seed identity è 1 per la tabella EmployeeData.
Una volta inserito il valore nella tabella EmployeeData, viene attivato un trigger per inserire il valore nella tabella Dipartimenti. Il valore seed identity è 100 per la tabella Dipartimenti.
- Otteniamo l’output 100 per la funzione SELECT @@IDENTITY
- La funzione SCOPE_IDENTITY restituisce il valore dell’identità solo nell’ambito corrente., Fornisce l’output 1 per questa funzione
Funzione SQL IDENT_CURRENT ()
Usiamo la funzione IDENT_CURRENT per restituire l’ultimo valore di IDENTITÀ generato per una tabella specificata in qualsiasi connessione. Non considera l’ambito della query SQL che genera il valore di identità. Dobbiamo specificare la tabella per la quale vogliamo controllare il valore dell’identità.
Nella seguente schermata, possiamo vedere che inseriamo i dati in Session id 64 e genera il valore di identità 2 nella tabella EmployeeData.,
Possiamo controllare in un’altra finestra di connessione il valore di identità corrente per la tabella EmployeeData e ottenere lo stesso output del valore di identità 2.,
1
|
SELECT IDENT_CURRENT(‘EmployeeData’) AS IdentityValue
|
SQL IDENTITY Function
In my previous article, we explored SQL SELECT INTO Statement, to create a new table and inserted data into it from the existing table., Possiamo utilizzare la funzione SQL IDENTITY per inserire i valori di identità nella tabella creata da SQL SELECT INTO statement.
Per impostazione predefinita, se una tabella di origine contiene una colonna IDENTITY, la tabella creata utilizzando un’istruzione SELECT INTO la eredita. Si consideri uno scenario in cui si desidera creare una tabella utilizzando l’istruzione SELECT INTO dall’output di una vista o join da più tabelle. In questo caso, si desidera creare anche una colonna IDENTITÀ in una nuova tabella.,
- Nota: la funzione SQL IDENTITY è diversa dalla proprietà IDENTITY che usiamo durante la creazione di qualsiasi tabella.
Abbiamo bisogno di specificare un tipo di dati per una colonna di utilizzare la funzione di identità SQL. Abbiamo anche bisogno di specificare i valori di SEED e Step per definire una configurazione di identità.
Non possiamo usare la funzione SQL IDENTITY in un’istruzione Select. Otteniamo il seguente messaggio di errore.
Msg 177, Livello 15, Stato 1, Riga 2La funzione IDENTITY può essere utilizzata solo quando l’istruzione SELECT ha una clausola INTO.,
Creiamo una tabella utilizzando l’istruzione SQL SELECT INTO con la seguente query.
Una volta eseguita l’istruzione, controllare le proprietà della tabella utilizzando il comando sp_help.
1
|
sp_help ‘TEMPTABLE’
|
Si può vedere la colonna di IDENTITÀ in TEMPTABLE proprietà secondo le condizioni specificate.,
Diamo un’occhiata a un altro esempio. Eseguire il seguente comando.,
1
2
3
4
5
|
SELEZIONARE IDENTITÀ( INT, 100, 2) COME NEW_ID,
ID
Nome
IN temp2
DA employeedata;
|
Abbiamo già la colonna di IDENTITÀ in EmployeeData tabella. La nuova tabella temp2 eredita anche la colonna IDENTITY., Non possiamo avere più colonne di IDENTITÀ in una tabella. A causa di ciò, otteniamo il seguente messaggio di errore.
Msg 8108, Livello 16, Stato 1, Riga 1Cannon aggiungere la colonna identity, utilizzando l’istruzione SELECT INTO, alla tabella ‘temp2’, che ha già la colonna ‘ID’ che eredita la proprietà identity.
Riepilogo
- Funzioni di IDENTITÀ SQL SCOPE_IDENTITY, IDENT_CURRENT e @@IDENTITY restituisce un output simile per le colonne di IDENTITÀ nella sessione corrente
- SCOPE_IDENTITY restituisce valori solo nell’ambito corrente., Siamo in grado di definire il perimetro di un modulo, Stored procedure, trigger o una funzione
- IDENT_CURRENT funzione restituisce un valore di identità per una tabella specificata in merito a una connessione che ha modificato il valore
- E ‘ possibile utilizzare SQL IDENTITÀ funzione di definire la propria IDENTITÀ in una tabella creata con SQL SELECT INTO
Conclusione
aveva In questo articolo, abbiamo esplorato l’Identità di funzioni in SQL Server. Dovremmo avere familiarità con le funzioni per utilizzarle nella scrittura di query t-SQL. Se hai commenti o domande, sentiti libero di lasciarli nei commenti qui sotto.,
- Autore
- Post Recenti
È il creatore di una delle più grandi collezioni online gratuite di articoli su un singolo argomento, con la sua serie di 50 parti su SQL Server Always On Availability Groups. Sulla base del suo contributo alla comunità SQL Server, è stato riconosciuto con vari premi tra cui il prestigioso “Best author of the year” ininterrottamente nel 2020 e 2021 a SQLShack.,
Raj è sempre interessato a nuove sfide, quindi se avete bisogno di consulenza aiuto su qualsiasi argomento trattato nei suoi scritti, egli può essere raggiunto a rajendra.gupta16 @ gmail.,com
Visualizza tutti i messaggi di Rajendra Gupta
- l’Esecuzione di piccoli e grandi aggiornamenti di versione per AWS RDS SQL Server – gennaio 29, 2021
- la Distribuzione di AWS RDS PostgreSQL istanze – 27 gennaio 2021
- Migrazione locale di database SQL AWS RDS SQL Server utilizzando AWS DMS – 25 gennaio 2021