ALTER SEQUENCE (Transact-SQL)

Ändert die Argumente eines vorhandenen Sequenzobjekts. Wenn die Sequenz mit der CACHE-Option erstellt wurde, wird der Cache durch Ändern der Sequenz neu erstellt.

Sequenzobjekte werden mit der CREATE SEQUENCE-Anweisung erstellt. Sequenzen sind ganzzahlige Werte und können jeden Datentyp aufweisen, der eine ganze Zahl zurückgibt. Der Datentyp kann nicht mit der ALTER SEQUENCE-Anweisung geändert werden. Löschen und erstellen Sie das Sequenzobjekt, um den Datentyp zu ändern.

Eine Sequenz ist ein benutzerdefiniertes schemagebundenes Objekt, das anhand einer Spezifikation eine Reihe von numerischen Werten generiert. Neue Werte werden aus einer Sequenz generiert, indem die NEXT VALUE FOR-Funktion aufgerufen wird. Mit sp_sequence_get_range können Sie mehrere Sequenznummern gleichzeitig abrufen. Informationen und Szenarien mit der CREATE SEQUENCE-Funktion, sp_sequence_get_range und der NEXT VALUE FOR-Funktion finden Sie unter Sequenznummern.

Themenlink (Symbol) Transact-SQL-Syntaxkonventionen

Syntax

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 } ]
    [ ; ]

Argumente

  • sequence_name
    Gibt den eindeutigen Namen der Sequenz in der Datenbank an. Der Typ ist sysname.

  • RESTART [ WITH <Konstante> ]
    Der nächste Wert, der vom Sequenzobjekt zurückgegeben wird. Falls der RESTART WITH-Wert angegeben wird, muss er eine ganze Zahl kleiner oder gleich dem maximalen und größer oder gleich dem minimalen Wert des Sequenzobjekts darstellen. Wenn der WITH-Wert weggelassen wird, wird die Sequenznummerierung anhand der ursprünglichen CREATE SEQUENCE-Option neu gestartet.

  • INCREMENT BY <Konstante>
    Der Wert, um den der Basiswert des Sequenzobjekts bei jedem Aufruf der NEXT VALUE FOR-Funktion inkrementiert (oder bei negativem Wert dekrementiert) wird. Wenn als Inkrement ein negativer Wert verwendet wird, ist der Wert des Sequenzobjekts absteigend, andernfalls ist er aufsteigend. Das Inkrement kann nicht 0 sein.

  • [ MINVALUE <Konstante> | NO MINVALUE ]
    Gibt die Grenzen für das Sequenzobjekt an. Wenn NO MINVALUE angegeben wird, wird der minimal mögliche Wert des Sequenzdatentyps verwendet.

  • [ MAXVALUE <Konstante> | NO MAXVALUE
    Gibt die Grenzen für das Sequenzobjekt an. Wenn NO MAXVALUE angegeben wird, wird der maximal mögliche Wert des Sequenzdatentyps verwendet.

  • [ CYCLE | NO CYCLE ]
    Diese Eigenschaft gibt an, ob das Sequenzobjekt vom minimalen Wert (oder bei absteigenden Sequenzobjekten vom maximalen Wert) neu gestartet oder ob eine Ausnahme ausgelöst werden soll, wenn der minimale oder maximale Wert überschritten wird.

    HinweisHinweis

    Der nächste Wert nach dem Durchlauf ist der minimale oder maximale Wert, nicht der START VALUE der Sequenz.

  • [ CACHE [<Konstante> ] | NO CACHE ]
    Vergrößert die Leistung für Anwendungen mit Sequenzobjekten durch Minimieren der Anzahl erforderlicher E/As zum Beibehalten von generierten Werten in den Systemtabellen.

    Weitere Informationen zum Verhalten des Caches finden Sie unter CREATE SEQUENCE (Transact-SQL).

Hinweise

Informationen zum Erstellen von Sequenzen sowie zum Verwalten des Sequenzcaches finden Sie unter CREATE SEQUENCE (Transact-SQL).

Der MINVALUE für aufsteigende Sequenzen und der MAXVALUE für absteigende Sequenzen können nicht auf einen Wert festgelegt werden, der den START WITH-Wert der Sequenz nicht zulässt. Um den MINVALUE einer aufsteigenden Sequenz auf einen höheren Wert als START WITH festzulegen, oder um den MAXVALUE einer absteigenden Sequenz auf einen niedrigeren Wert als START WITH festzulegen, schließen Sie das RESTART WITH-Argument ein, damit die Sequenz an einem gewünschten Punkt neu gestartet wird, der innerhalb des minimalen und maximalen Bereichswerts liegt.

Metadaten

Weitere Informationen zu Sequenzen erhalten Sie durch Abfragen von sys.sequences.

Sicherheit

Berechtigungen

Erfordert die ALTER-Berechtigung für die Sequenz oder die ALTER-Berechtigung für das Schema. Die ALTER-Berechtigung für die Sequenz kann mit ALTER ON OBJECT im folgenden Format erteilt werden:

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

Der Besitz eines Sequenzobjekts kann mit der ALTER AUTHORIZATION-Anweisung übertragen werden.

Überwachung

Überwachen Sie die SCHEMA_OBJECT_CHANGE_GROUP, um ALTER SEQUENCE zu überwachen.

Beispiele

Beispiele zum Erstellen von Sequenzen und Verwenden der NEXT VALUE FOR-Funktion für das Generieren von Sequenznummern finden Sie unter Sequenznummern.

A.Ändern einer Sequenz

Im folgenden Beispiel werden das Schema Test und die Sequenz TestSeq mit dem int-Datentyp erstellt, und ein Bereich von 0 bis 255 wird verwendet. Die Sequenz beginnt mit 125 und wird immer um 25 inkrementiert, wenn eine Zahl generiert wurde. Da die Sequenz zum Durchlaufen konfiguriert wurde, wird sie beim Überschreiten des maximalen Werts von 200 beim minimalen Wert von 100 neu gestartet.

CREATE SCHEMA Test ;
GO

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

Im folgenden Beispiel wird die TestSeq-Sequenz geändert, um einen Bereich von 0 bis 255 zu erhalten. Die Nummerierung wird von der Sequenz bei 100 neu gestartet und wird immer um 50 inkrementiert, wenn eine Zahl generiert wurde.

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

Da die Sequenz keine Durchläufe ausführt, führt die NEXT VALUE FOR-Funktion zu einem Fehler, wenn die Sequenz 200 überschreitet.

B.Neustarten einer Sequenz

Im folgenden Beispiel wird die Sequenz CountBy1 erstellt. Die Sequenz verwendet die Standardwerte.

CREATE SEQUENCE Test.CountBy1 ;

Um einen Sequenzwert zu generieren, wird vom Besitzer folgende Anweisung ausgeführt:

SELECT NEXT VALUE FOR Test.CountBy1

Der zurückgegebene Wert -9.223.372.036.854.775.808 ist der niedrigst mögliche Wert des bigint-Datentyps. Der Besitzer erkennt, dass die Sequenz bei 1 beginnen sollte, die START WITH-Klausel beim Erstellen der Sequenz allerdings nicht angegeben wurde. Um diesen Fehler zu korrigieren, wird die folgende Anweisung vom Besitzer ausgeführt.

ALTER SEQUENCE Test.CountBy1 RESTART WITH 1 ;

Anschließend wird die folgende Anweisung vom Besitzer ausgeführt, um erneut eine Sequenznummer zu generieren.

SELECT NEXT VALUE FOR Test.CountBy1;

Die Zahl ist jetzt 1, wie erwartet.

Die CountBy1-Sequenz wurde mit dem Standardwert von NO CYCLE erstellt; nachdem die Zahl 9.223.372.036.854.775.807 generiert wurde, wird die Ausführung daher beendet. Nachfolgende Aufrufe des Sequenzobjekts geben den Fehler 11728 zurück. Die folgende Anweisung ändert das Sequenzobjekt auf Durchläufe und legt einen Cache von 20 fest.

ALTER SEQUENCE Test.CountBy1
    CYCLE
    CACHE 20 ;

Wenn vom Sequenzobjekt jetzt der Wert 9.223.372.036.854.775.807 erreicht wird, erfolgt ein Durchlauf, und die nächste Zahl nach dem Durchlauf ist der minimale Wert des Datentyps -9.223.372.036.854.775.808.

Der Besitzer hat festgestellt, dass der bigint-Datentyp jeweils 8 Bytes verwendet. Der int-Datentyp, der 4 Bytes verwendet, ist ausreichend. Der Datentyp eines Sequenzobjekts kann jedoch nicht geändert werden. Eine Änderung in den int-Datentyp erfordert das Löschen des Sequenzobjekts durch den Besitzer und das Neuerstellen des Objekts mit dem korrekten Datentyp.

Siehe auch

Verweis

CREATE SEQUENCE (Transact-SQL)

DROP SEQUENCE (Transact-SQL)

NEXT VALUE FOR (Transact-SQL)

sp_sequence_get_range (Transact-SQL)

Konzepte

Sequenznummern