Guida per principianti agli oggetti sequenza in SQL Server

SQL Server è supportato Oggetti SEQUENCE dall'inizio di SQL Server 2012 e versioni successive. Il database Oracle ha supportato gli oggetti SEQUENCE fin dall'inizio. Puoi leggere il post di archivio su Tech-Recipes utilizzando SEQUENCE in Oracle.

Possiamo creare un SEQUENCE in SQL Server per generare valori numerici sequenziali secondo le linee guida fornite. Gli oggetti SEQUENCE possono essere classificati con una colonna IDENTITY in SQL Server, ma a differenza delle colonne IDENTITY, gli oggetti SEQUENCE non sono collegati agli oggetti Table. L'IDENTITÀ è considerata una proprietà della tabella collegata alle tabelle, mentre gli oggetti SEQUENCE sono creati in modo indipendente e possono essere utilizzati con istruzioni DML come INSERT e UPDATE o per riferire separatamente un oggetto SEQUENCE. Questo tutorial è una guida per principianti agli oggetti SEQUENCE in SQL Server.

Come distinguere tra proprietà SEQUENCE e IDENTITY

1. Gli oggetti sequenza non dipendono dalle tabelle, mentre le proprietà identità sono associate alle tabelle.

2. Gli oggetti sequenza vengono utilizzati per generare valori sequenziali su più tabelle con l'ambito del database. La proprietà Identity può essere utilizzata per generare numeri incrementali a livello di tabella.

3. Gli oggetti sequenza sono stati introdotti con un'edizione di SQL Server 2012, mentre le proprietà Identity sono supportate con le edizioni precedenti di SQL Server.

4. Possiamo resettare il numero di sequenza corrente di un oggetto Sequence e le dimensioni incrementali dello step. Con IDENTITY, possiamo RESEED su un valore specifico, ma non possiamo modificare la dimensione del passo incrementale.

5. Gli oggetti di sequenza possono essere memorizzati nella cache per migliorare le prestazioni, mentre i valori di identità non possono essere memorizzati nella cache.

6. Con una sequenza, è possibile definire il valore Min / Max. Con la proprietà Identity, questo non è supportato.

 

La sintassi degli oggetti SEQUENCE

CREATE SEQUENCE [schema]. [Sequence_name] [AS  ] [START WITH] [INCREMENT BY] [MINVALUE | NO MINVALUE] [MAXVALUE | NO MAXVALUE] [CYCLE | NO CYCLE] [valore CACHE | NO CACHE]; 

Argomenti dell'oggetto SEQUENCE

1. Schema: È possibile definire un nome schema durante la creazione di oggetti sequenza. Se non viene fornito alcun schema, dbo lo schema è usato di default.

2. Nome sequenza : Un nome univoco da specificare per identificare l'oggetto sequenza

3. Tipo di dati: I tipi di dati consentiti con gli oggetti sequenza sono TinyInt, SmallInt, Int, Decimal e BIGINT. Se non viene fornito alcun tipo di dati, il tipo di dati BIGINT viene utilizzato per impostazione predefinita.

4. INIZIARE CON: Il primo valore da restituire dall'oggetto sequenza

5. INCREMENTO DI: Un valore da utilizzare per incrementare o decrementare (se negativo) l'oggetto della sequenza; Questo valore non può essere 0. Se il valore INCREMENT BY è positivo, gli oggetti sequenza sono in ordine crescente. Se negativo, allora stanno scendendo.

6. MINVALUE - Valore limite minimo per una sequenza, è un parametro facoltativo, se non definito prende il valore minimo dell'intervallo definito del tipo di dati.

7. MAXVALUE: Valore limite massimo per una sequenza, È un parametro facoltativo, se non definito prende il valore massimo dell'intervallo definito del tipo di dati.

8. CICLO | NOCYCLE: Se si desidera riavviare il valore di un oggetto sequenza da un valore minimo o massimo, parametro facoltativo, il valore predefinito è NOCYCLE.

9. CACHE | NOCACHE: Aumenta le prestazioni abilitando la cache per ridurre l'I / O del disco; usare CACHE aiuta a leggere il valore corrente dalla memoria.

 

Esempi: utilizzo di SEQUENCE Object con query SQL

1. Creare un oggetto sequenza con un nome schema, nome sequenza, tipo dati, iniziare con e incrementare con argomenti.

L'esempio seguente creerà un oggetto sequenza chiamato “UniqueSequenceObject.” Comincerà da 1e il valore viene incrementato di 1 ogni volta che utilizziamo "UniqueSequenceObject."

SE ESISTE (SELECT name FROM Sys.sequences WHERE name = 'UniqueSequenceObject') DROP SEQUENCE UniqueSequenceObject GO CREATE SEQUENCE dbo.UniqueSequenceObject AS INT START CON 1 INCREMENTO DI 1 NO MINVALUE NO MAXVALUE NO CICLO NO CACHE GO 

2. Come ottenere il primo valore utilizzando un oggetto sequenza

La seguente istruzione restituirà il valore "1" per ottenere il primo valore utilizzando "UniqueSequenceObject".

SELECT value = NEXT VALUE FOR dbo.UniqueSequenceObject; 
Valore di output ------- 1 

3. Memorizzazione di un valore di oggetto sequenza in una variabile

La seguente dichiarazione dichiarerà una variabile e memorizzerà il successivo valore di sequenza (cioè "2") nella variabile @SequenceValue.

DICHIARARE @SequenceValue come INT; SET @SequenceValue = NEXT VALUE FOR dbo. UniqueSequenceObject; SELECT @SequenceValue as SequenceValue; 
Output SequenceValue -------------------- 2 

4. Visualizzazione delle proprietà di un oggetto sequenza utilizzando la vista di sistema

La seguente query utilizza la vista del sistema sys.sequence per fornire maggiori informazioni sull'oggetto sequenza “UniqueSequenceObject”. Ci mostra un valore iniziale, valore min / max e un valore corrente.

selezionare nome, tipo_desc, valore_iniziale, incremento, valore_minale, valore_massimo, valore_attuale da sys. sequenze dove name = 'UniqueSequenceObject'; 

La tabella seguente mostra il valore start_value e il valore incrementale come "1." Abbiamo definito questi valori durante la creazione di un oggetto sequenza. Mostra anche un valore min / max che sono valori al contorno del tipo di dati Integer. Mostra anche un valore corrente "2" che abbiamo usato nell'Esempio 3 per memorizzarlo in una variabile.

5. Creazione di oggetti sequenza con limite del valore minimo / massimo

La seguente query crea un oggetto sequenza “TestSequenceObject”. Inizia con 100 e incrementato di 10 con il valore minimo "100" e il valore massimo "150".

CREATE SEQUENCE dbo.TestSequenceObject AS INT START CON 100 INCREMENTO DI 10 MINVALUE 100 MAXVALUE 150 NO CACHE NO CYCLE GO 

Richiamiamo un valore iniziale usando "TestSequenceObject."

DICHIARARE @SequenceValue asINT; SET @SequenceValue = NEXT VALUE FOR dbo.TestSequenceObject; SELECT @SequenceValue as SequenceValue; 
Output ------------- SequenceValue 100 

Eseguendo la query sotto, eccederemo il valore limite massimo definito per l'oggetto sequenza. Solleverà un errore indicando che abbiamo attraversato il valore limite per l'oggetto sequenza definito. Utilizzando una dichiarazione GO, possiamo eseguire la query sotto "5" volte.

SELEZIONA VALORE SUCCESSIVO per dbo.TestSequenceObject GO 5 

Otteniamo il seguente errore una volta che il valore corrente raggiunge il valore limite massimo "150".

Messaggio 11728, livello 16, stato 1, riga 16
L'oggetto sequenza 'TestSequenceObject' ha raggiunto il suo valore minimo o massimo. Riavvia l'oggetto sequenza per consentire la generazione di nuovi valori.
** Si è verificato un errore durante l'esecuzione del batch. Continuando.
Esecuzione batch completata 5 volte.

6. Creare un oggetto Sequence con la proprietà CYCLE

Nell'esempio 5, non abbiamo abilitato la proprietà CYCLE dell'oggetto sequenza. Usando questa proprietà, possiamo riavviare l'oggetto Sequence dal suo valore minimo per evitare di lanciare l'errore sopra.

Creiamo di nuovo un oggetto sequenza con la proprietà CYCLE e testiamo se fallisce quando raggiunge il limite massimo. Una volta che la sequenza raggiunge il valore limite massimo, inizierà nuovamente dal suo valore minimo definito.

SE ESISTE (SELECT name FROM Sys.sequences WHERE name = 'TestSequenceObject') DROP SEQUENCE TestSequenceObject CREATE SEQUENCE dbo.TestSequenceObject AS INT START CON 100 INCREMENTO DI 10 MINVALUE 100 MAXVALUE 150 NO CACHE CYCLE GO SELECT Valore = VALORE SUCCESSIVO per dbo.TestSequenceObject GO 10 

7. Utilizzo di un oggetto sequenza con un'istruzione INSERT

IF OBJECT_ID ('Employee', 'U') NON È Dipendente NULL DROP TABLE; CREATE TABLE Employee (EmployeeId INT, Name VARCHAR (100)); 

Inserire pochi record nella tabella Dipendente utilizzando l'oggetto sequenza.

INSERIRE i valori Employee (EmployeeId, Name) (valore successivo per dbo.TestSequenceObject, 'Vishwanath'); INSERIRE i valori Employee (EmployeeId, Name) (valore successivo per dbo.TestSequenceObject, 'Dalvi'); SELEZIONA * DA DIPENDENTE; 
Nome Nome Impiegato di uscita ----------- ------------------- 1 Vishwanath 2 Dalvi 

Maggiori informazioni sulla programmazione di database e SQL pubblicati su Tech-Recipes.