Creare una sequenza
Potresti voler creare una sequenza in SQL Server per gestire un campo autonumber.
Sintassi
La sintassi per creare una sequenza in SQL Server (Transact-SQL) è:
CREATE SEQUENCE sequence_name ;
AS datatype Può essere BIGINT, INT, TINYINT, SMALLINT, DECIMAL o NUMERIC. Se il tipo di dato non è specificato, la sequenza sarà predefinita su un tipo di dato BIGINT. START WITH value Il valore iniziale che la sequenza restituisce inizialmente. INCREMENT BY value Può essere un valore positivo o negativo. Se viene specificato un valore positivo, la sequenza sarà una sequenza ascendente di valori. Se viene specificato un valore negativo, la sequenza sarà una sequenza decrescente di valori. Valore MINVALUE Il valore minimo consentito per la sequenza. NO MINVALUE Significa che non c’è un valore minimo specificato per la sequenza. Valore MAXVALUE Il valore massimo consentito per la sequenza. NO MAXVALUE Significa che non c’è un valore massimo specificato per la sequenza. CYCLE Significa che la sequenza ricomincerà una volta completata la sequenza. NO CYCLE Significa che la sequenza solleverà un errore quando avrà completato la sequenza. Non ricomincerà la sequenza di nuovo. Valore CACHE Mette in cache i numeri di sequenza per minimizzare l’IO del disco. NO CACHE Non mette in cache i numeri di sequenza.
Esempio
Guardiamo un esempio di come creare una sequenza in SQL Server (Transact-SQL).
Per esempio:
CREATE SEQUENCE contacts_seq AS BIGINT START WITH 1 INCREMENT BY 1 MINVALUE 1 MAXVALUE 99999 NO CYCLE CACHE 10;
Questo dovrebbe creare un oggetto sequenza chiamato contacts_seq. Il primo numero di sequenza che userebbe è 1 e ogni numero successivo aumenterebbe di 1 (cioè: 2,3,4,…}. Metterà in cache fino a 10 valori per le prestazioni. Il valore massimo che il numero di sequenza può essere 99999 e la sequenza non andrà in ciclo una volta raggiunto il valore massimo.
Quindi potete semplificare l’istruzione CREATE SEQUENCE come segue:
CREATE SEQUENCE contacts_seq START WITH 1 INCREMENT BY 1;
Ora che avete creato un oggetto sequenza per simulare un campo autonumber, vedremo come recuperare un valore da questo oggetto sequenza. Per recuperare il prossimo valore nell’ordine della sequenza, devi usare il comando NEXT VALUE FOR.
Per esempio:
SELECT NEXT VALUE FOR contacts_seq;
Questo recupererebbe il prossimo valore da contacts_seq. L’istruzione nextval deve essere usata in un’istruzione SQL. Per esempio:
INSERT INTO contacts(contact_id, last_name)VALUES(NEXT VALUE FOR contacts_seq, 'Smith');
Questa istruzione INSERT inserirebbe un nuovo record nella tabella contacts. Al campo contact_id verrebbe assegnato il numero successivo dalla sequenza contacts_seq. Il campo last_name verrebbe impostato a ‘Smith’.