Freigeben über


ALTER SEQUENZ (Transact-SQL)

Gilt für:SQL ServerAzure SQL-DatenbankVerwaltete Azure SQL-InstanzSQL-Datenbank in Microsoft Fabric

Ändert die Argumente eines vorhandenen Sequenzobjekts. Wenn die Sequenz mit der CACHE Option erstellt wurde, wird durch Ändern der Sequenz der Cache 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 mithilfe 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. Wird verwendet sp_sequence_get_range , um mehrere Sequenznummern gleichzeitig abzurufen. Informationen und Szenarien, die sowohl die Funktion als CREATE SEQUENCEauch sp_sequence_get_rangedie NEXT VALUE FOR Funktion verwenden, finden Sie unter Sequenznummern.

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. Wenn angegeben, muss der RESTART WITH Wert eine ganze Zahl sein, die kleiner oder gleich dem Maximum und größer als oder gleich dem Minimalwert des Sequenzobjekts ist. Wenn der WITH Wert nicht angegeben wird, wird die Sequenznummerierung basierend auf den ursprünglichen CREATE SEQUENCE Optionen neu gestartet.

INCREMENT BY <Konstante>

Der Wert, der verwendet wird, um den Basiswert des Sequenzobjekts für jeden Aufruf der NEXT VALUE FOR Funktion zu erhöhen (oder zu erhöhen, wenn negativ). Wenn es sich bei dem Inkrement um einen negativen Wert handelt, ist das Sequenzobjekt absteigend, andernfalls ist es aufsteigend. Das Inkrement darf nicht 0 sein.

[ MINVALUE <Konstante> | NO MINVALUE ]

Gibt die Grenzen für das Sequenzobjekt an. Wenn NO MINVALUE angegeben, wird der mindest mögliche Wert des Sequenzdatentyps verwendet.

[ MAXVALUE-Konstante <> | KEIN MAXWERT ]

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

[ ZYKLUS | KEIN ZYKLUS ]

Diese Eigenschaft gibt an, ob das Sequenzobjekt vom Minimalwert (oder dem Maximum für absteigende Sequenzobjekte) neu gestartet werden soll, oder eine Ausnahme auslösen, wenn sein Minimal- oder Maximalwert überschritten wird.

Hinweis

Nach dem Durchlaufen des nächsten Werts handelt es sich um den Minimal- oder Maximalwert, nicht um den START VALUE Wert der Sequenz.

[ CACHE <[ Konstante> ] | KEIN 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.

Hinweise

Informationen dazu, wie Sequenzen erstellt werden und wie der Sequenzcache verwaltet wird, finden Sie unter CREATE SEQUENCE.

Die MINVALUE für aufsteigenden Sequenzen und die MAXVALUE absteigenden Sequenzen können nicht in einen Wert geändert werden, der den START WITH Wert der Sequenz nicht zulässt. Um die MINVALUE Abfolge einer aufsteigenden Sequenz in eine Zahl zu ändern, die größer als der START WITH Wert ist, oder um die MAXVALUE absteigende Sequenz in eine Zahl zu ändern, die kleiner als der START WITH Wert ist, schließen Sie das RESTART WITH Argument ein, um die Sequenz an einem gewünschten Punkt neu zu starten, der innerhalb des minimalen und maximalen Bereichs liegt.

Metadaten

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

Berechtigungen

Erfordert ALTER berechtigungen für die Sequenz oder ALTER Berechtigung für das Schema. Verwenden Sie zum Erteilen ALTER der Berechtigung für die Sequenz ALTER ON OBJECT das folgende Format:

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

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

Audit

Um zu überwachen ALTER SEQUENCE, überwachen Sie die SCHEMA_OBJECT_CHANGE_GROUP.

Beispiele

Beispiele für das Erstellen von Sequenzen und die Verwendung der NEXT VALUE FOR Funktion zum 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 und einem Bereich von 100 bis 200 erstellt. Die Sequenz beginnt mit 125 und wird immer um 25 inkrementiert, wenn eine Zahl generiert wurde. Da die Sequenz so konfiguriert ist, dass ein Zyklus ausgeführt wird, wenn der Wert den Maximalwert von 200 überschreitet, wird die Sequenz mit dem Minimalwert 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 Sequenz „TestSeq“ so geändert, dass sie über einen Bereich von 50 bis 200 verfügt. 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 nicht durchlaufen wird, führt die NEXT VALUE FOR Funktion zu einem Fehler, wenn die Sequenz 200 überschreitet.

B. Neustarten einer Sequenz

Im folgenden Beispiel wird eine Sequenz mit dem Namen erstellt CountBy1. 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 mit 1 beginnen soll, aber die Klausel beim Erstellen der Sequenz nicht angegeben START WITH 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 NO CYCLE erstellt, sodass sie nach dem Generieren der Zahl 9.223.372.036.854.775.807 nicht mehr funktioniert. Nachfolgende Aufrufe des Sequenzobjekts gibt 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 erkannt, dass der Bigint-Datentyp bei jeder Verwendung 8 Bytes verwendet. Der int-Datentyp, der 4 Byte 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.