ALTER SEQUENCE (Transact-SQL)

Modifica gli argomenti di un oggetto sequenza esistente. Se la sequenza è stata creata con l'opzione CACHE, la modifica della sequenza comporta la ricreazione della cache.

Gli oggetti sequenza vengono creati tramite l'istruzione CREATE SEQUENCE. Le sequenze sono valori interi e possono essere di qualsiasi tipo di dati in grado di restituire un intero. Non è possibile modificare il tipo di dati tramite l'istruzione ALTER SEQUENCE. Per modificare il tipo di dati, eliminare e ricreare l'oggetto sequenza.

Una sequenza è un oggetto associato a schema definito dall'utente che genera una sequenza di valori numerici in base a una specifica. Si generano nuovi valori da una sequenza chiamando la funzione NEXT VALUE FOR. Utilizzare sp_sequence_get_range per ottenere immediatamente più numeri di sequenza. Per informazioni e scenari in cui vengono utilizzate le funzioni CREATE SEQUENCE, sp_sequence_get_range e NEXT VALUE FOR, vedere Numeri di sequenza.

Icona di collegamento a un argomento Convenzioni della sintassi Transact-SQL

Sintassi

ALTER SEQUENCE [schema_name. ] sequence_name
    [ RESTART [ WITH <constant> ] ]
    [ INCREMENT BY <constant> ]
    [ { MINVALUE <constant> } | { NO MINVALUE } ]
    [ { MAXVALUE <constant> } | { NO MAXVALUE } ]
    [ CYCLE | { NO CYCLE } ]
    [ { CACHE [ <constant> ] } | { NO CACHE } ]
    [ ; ]

Argomenti

  • sequence_name
    Specifica il nome univoco con il quale è nota la sequenza nel database. Il tipo è sysname.

  • RESTART [ WITH <constant> ]
    Valore successivo che verrà restituito dall'oggetto sequenza. Se specificato, il valore RESTART WITH deve essere un numero intero minore o uguale al valore massimo e maggiore o uguale al valore minimo dell'oggetto sequenza. Se il valore WITH viene omesso, la numerazione della sequenza ricomincia in base alle opzioni CREATE SEQUENCE originali.

  • INCREMENT BY <costante>
    Valore utilizzato per incrementare (o diminuire, in caso di valore negativo) il valore di base dell'oggetto sequenza per ogni chiamata alla funzione NEXT VALUE FOR. Se l'incremento è un valore negativo, l'oggetto sequenza ha un ordine decrescente, in caso contrario avrà un ordine crescente. L'incremento non può essere 0.

  • [ MINVALUE <constant> | NO MINVALUE ]
    Specifica i limiti per l'oggetto sequenza. Se viene specificato NO MINVALUE, viene utilizzato il valore possibile minimo del tipo di dati della sequenza.

  • [ MAXVALUE <constant> | NO MAXVALUE
    Specifica i limiti per l'oggetto sequenza. Se viene specificato NO MAXVALUE, viene utilizzato il valore possibile massimo del tipo di dati della sequenza.

  • [ CYCLE | NO CYCLE ]
    Questa proprietà specifica se l'oggetto sequenza deve riprendere dal valore minimo (o massimo per gli oggetti sequenza con ordine decrescente) o generare un'eccezione quando viene superato il valore massimo o minimo.

    [!NOTA]

    Dopo la ripresa del ciclo, il valore successivo sarà il valore minimo o massimo, non il valore START VALUE della sequenza.

  • [ CACHE [<constant> ] | NO CACHE ]
    Migliora le prestazioni delle applicazioni che utilizzano gli oggetti sequenza riducendo il numero di I/O necessari per rendere persistenti i valori generati nelle tabelle di sistema.

    Per ulteriori informazioni sul comportamento della cache, vedere CREATE SEQUENCE (Transact-SQL).

Osservazioni

Per informazioni sulla creazione delle sequenze e sulla gestione della cache delle sequenze, vedere CREATE SEQUENCE (Transact-SQL).

Non è possibile modificare MINVALUE per le sequenze con ordine crescente e MAXVALUE per le sequenze con ordine decrescente in un valore che non consente il valore START WITH della sequenza. Per modificare MINVALUE per una sequenza con ordine crescente in un numero maggiore del valore START WITH o per modificare MAXVALUE di una sequenza con ordine decrescente in un numero più piccolo del valore START WITH, includere l'argomento RESTART WITH per riprendere la sequenza in un punto desiderato compreso nell'intervallo minimo e massimo.

Metadati

Per informazioni sulle sequenze, eseguire una query in sys.sequences.

Sicurezza

Autorizzazioni

Richiede l'autorizzazione ALTER per la sequenza o ALTER per lo schema. Per concedere l'autorizzazione ALTER per la sequenza, utilizzare ALTER ON OBJECT nel formato seguente:

GRANT ALTER ON OBJECT::Test.TinySeq TO [AdventureWorks\Larry]

È possibile trasferire la proprietà di un oggetto sequenza tramite l'istruzione ALTER AUTHORIZATION.

Controllo

Per controllare ALTER SEQUENCE, monitorare SCHEMA_OBJECT_CHANGE_GROUP.

Esempi

Per esempi relativi alla creazione di sequenze e all'utilizzo della funzione NEXT VALUE FOR per generare numeri di sequenza, vedere Numeri di sequenza.

A.Alterazione di una sequenza

Nell'esempio seguente vengono creati uno schema denominato Test e una sequenza denominata TestSeq utilizzando il tipo di dati int, con un intervallo di valori compreso tra 0 e 255. La sequenza inizia con 125 e aumenta di 25 ogni volta che viene generato un numero. Poiché la sequenza è configurata per la ripresa del ciclo quando il valore supera il valore massimo di 200, la sequenza riprende dal valore minimo di 100.

CREATE SCHEMA Test ;
GO

CREATE SEQUENCE Test.TestSeq
    AS int 
    START WITH 125
    INCREMENT BY 25
    MINVALUE 100
    MAXVALUE 200
    CYCLE
    CACHE 3
;
GO

Nell'esempio seguente la sequenza TestSeq viene modificata in modo da disporre di un intervallo compreso tra 0 e 255. La sequenza riavvia la serie di numerazione con 100 e aumenta di 50 ogni volta che viene generato un numero.

ALTER SEQUENCE Test. TestSeq
    RESTART WITH 100
    INCREMENT BY 50
    MINVALUE 50
    MAXVALUE 200
    NO CYCLE
    NO CACHE
;
GO

Poiché la sequenza non viene ripresa, la funzione NEXT VALUE FOR genererà un errore quando la sequenza supera 200.

B.Riavvio di una sequenza

Nell'esempio seguente viene creata una sequenza denominata CountBy1. La sequenza utilizza i valori predefiniti.

CREATE SEQUENCE Test.CountBy1 ;

Per generare un valore di sequenza, il proprietario esegue l'istruzione seguente:

SELECT NEXT VALUE FOR Test.CountBy1

Il valore restituito -9.223.372.036.854.775.808 è il valore più piccolo possibile per il tipo di dati bigint. Il proprietario desidera ora che la sequenza inizi con 1, ma non ha indicato la clausola START WITH quando ha creato la sequenza. Per risolvere l'errore, il proprietario esegue l'istruzione seguente.

ALTER SEQUENCE Test.CountBy1 RESTART WITH 1 ;

Il proprietario riesegue quindi l'istruzione seguente per generare un numero di sequenza.

SELECT NEXT VALUE FOR Test.CountBy1;

Il numero è ora 1, come previsto.

La sequenza CountBy1 è stata creata utilizzando il valore predefinito di NO CYCLE, pertanto si arresterà dopo avere generato il numero 9.223.372.036.854.775.807. Le chiamate successive all'oggetto sequenza restituiranno l'errore 11728. Nell'istruzione seguente viene modificato l'oggetto sequenza in modo che venga ripreso il ciclo e viene impostata una cache di 20.

ALTER SEQUENCE Test.CountBy1
    CYCLE
    CACHE 20 ;

Quando l'oggetto sequenza raggiunge 9.223.372.036.854.775.807 il ciclo viene ripreso e il numero successivo dopo la ripresa del ciclo sarà il minimo del tipo di dati, ovvero -9.223.372.036.854.775.808.

Il proprietario si rende conto che il tipo di dati bigint utilizza 8 byte ogni volta che viene utilizzato. Il tipo di dati int che utilizza 4 byte è sufficiente. Non è tuttavia possibile modificare il tipo di dati di un oggetto sequenza. Per modificare un tipo di dati int il proprietario deve eliminare l'oggetto sequenza e ricrearlo con il tipo di dati corretto.

Vedere anche

Riferimento

CREATE SEQUENCE (Transact-SQL)

DROP SEQUENCE (Transact-SQL)

NEXT VALUE FOR (Transact-SQL)

sp_sequence_get_range (Transact-SQL)

Concetti

Numeri di sequenza