SQL Server wurde unterstützt SEQUENCE-Objekte seit der Gründung von SQL Server 2012 und späteren Editionen. Die Oracle-Datenbank hat SEQUENCE-Objekte von Anfang an unterstützt. Sie können den Archivbeitrag zu Tech-Recipes mit SEQUENCE in Oracle lesen.
Wir können eine erstellen SEQUENCE in SQL Server zum Generieren sequentieller numerischer Werte gemäß den angegebenen Richtlinien. SEQUENCE-Objekte können in SQL Server mit einer IDENTITY-Spalte klassifiziert werden. Im Gegensatz zu IDENTITY-Spalten sind SEQUENCE-Objekte jedoch nicht mit Table-Objekten verknüpft. IDENTITY wird als Tabelleneigenschaft betrachtet, die an Tabellen angehängt ist, während SEQUENCE-Objekte unabhängig erstellt werden und mit DML-Anweisungen wie INSERT und UPDATE oder zum separaten Verweisen auf ein SEQUENCE-Objekt verwendet werden können. Dieses Tutorial ist eine Anleitung für Anfänger zu SEQUENCE-Objekten in SQL Server.
Wie unterscheidet man SEQUENCE- und IDENTITY-Eigenschaften?
1. Sequenzobjekte sind nicht von Tabellen abhängig, während Identitätseigenschaften mit Tabellen verknüpft sind.
2. Sequenzobjekte werden verwendet, um sequenzielle Werte für mehrere Tabellen im Datenbankbereich zu generieren. Mit der Identity-Eigenschaft können inkrementelle Zahlen auf Tabellenebene generiert werden.
3. Sequenzobjekte wurden mit einer Edition von SQL Server 2012 eingeführt, während Identitätseigenschaften mit älteren Editionen von SQL Server unterstützt werden.
4. Wir können die aktuelle Sequenznummer und Schrittweite eines Sequenzobjekts zurücksetzen. Mit IDENTITY können wir auf einen bestimmten Wert RESEED, aber wir können die Schrittweite nicht ändern.
5. Sequenzobjekte können zur Verbesserung der Leistung im Arbeitsspeicher zwischengespeichert werden, während Identitätswerte nicht zwischengespeichert werden können.
6. Mit einer Sequenz können Sie den Min / Max-Wert definieren. Bei der Identity-Eigenschaft wird dies nicht unterstützt.
Die Syntax von SEQUENCE-Objekten
CREATE SEQUENCE [Schema]. [Sequenzname] [AS ] [START WITH] [INCREMENT BY] [MINVALUE | NO MINVALUE] [MAXVALUE | NO MAXVALUE] [CYCLE | KEIN ZYKLUS] [CACHE-Wert | KEINE CACHE];
Argumente eines SEQUENCE-Objekts
1. Schema: Sie können einen Schemanamen definieren, während Sie Sequenzobjekte erstellen. Wenn kein Schema bereitgestellt wird, dbo Schema wird standardmäßig verwendet.
2. Sequenzname : Ein eindeutiger Name, der zum Identifizieren des Sequenzobjekts angegeben werden soll
3. Datentyp: Datentypen, die bei Sequenzobjekten zulässig sind, sind TinyInt, SmallInt, Int, Decimal und BIGINT. Wenn kein Datentyp angegeben ist, wird standardmäßig der BIGINT-Datentyp verwendet.
4. BEGINNEN MIT: Der erste Wert, der vom Sequenzobjekt zurückgegeben werden soll
5. Erhöhung um: Ein Wert, der zum Inkrementieren oder Dekrementieren (falls negativ) des Sequenzobjekts verwendet wird. Dieser Wert kann nicht 0 sein. Wenn der INCREMENT BY-Wert positiv ist, sind die Sequenzobjekte aufsteigend. Wenn negativ, dann fallen sie ab.
6. MINVALUE - Minimaler Grenzwert für eine Sequenz. Ist ein optionaler Parameter. Wenn er nicht definiert ist, nimmt er den Minimalwert des definierten Datentypbereichs an.
7. MAXVALUE: Maximaler Grenzwert für eine Sequenz. Ist ein optionaler Parameter. Wenn er nicht definiert ist, nimmt er den Maximalwert des definierten Datentypbereichs an.
8. CYCLE | NOCYCLE: Wenn Sie den Wert eines Sequenzobjekts von einem minimalen oder maximalen Wert (optionaler Parameter) neu starten möchten, ist der Standardwert NOCYCLE.
9. CACHE | NOCACHE: Erhöhen Sie die Leistung, indem Sie den Cache aktivieren, um die Festplatten-E / A zu reduzieren. Die Verwendung von CACHE hilft, den aktuellen Wert aus dem Speicher zu lesen.
Beispiele: Verwenden des SEQUENCE-Objekts mit SQL-Abfragen
1. Erstellen Sie ein Sequenzobjekt mit einem Schemanamen, Sequenznamen, Datentyp, Beginn mit und erhöhen Sie es mit Argumenten.
Im folgenden Beispiel wird ein Sequenzobjekt mit dem Namen erstellt "UniqueSequenceObject." Es beginnt ab 1und der Wert wird um erhöht 1 jedes Mal, wenn wir "UniqueSequenceObject" verwenden.
IF EXISTS (SELECT name FROM Sys.sequences WHERE name = 'UniqueSequenceObject') DROP SEQUENCE UniqueSequenceObject GO CREATE SEQUENCE dbo.UniqueSequenceObject ALS INT START MIT 1 ERHÖHUNG VON 1 NO MINVALUE NO MAXIVAL NO CYCLE NO CACHE GO
2. So erhalten Sie den ersten Wert mithilfe eines Sequenzobjekts
Die folgende Anweisung gibt den Wert "1" zurück, um den ersten Wert mit "UniqueSequenceObject" abzurufen.
SELECT-Wert = NÄCHSTER WERT FÜR dbo.UniqueSequenceObject;
Ausgabewert ------- 1
3. Speichern eines Sequenzobjektwerts in einer Variablen
Die folgende Anweisung deklariert eine Variable und speichert den nächsten Sequenzwert (d. H. "2") in der @SequenceValue-Variablen.
DECLARE @SequenceValue als INT; SET @SequenceValue = NÄCHSTER WERT FÜR dbo. UniqueSequenceObject; SELECT @SequenceValue als SequenceValue;
Ausgabesequenzwert -------------------- 2
4. Eigenschaften eines Sequenzobjekts mithilfe der Systemansicht anzeigen
Die folgende Abfrage verwendet die Systemansicht sys.sequence Weitere Informationen zum Sequenzobjekt "UniqueSequenceObject". Es zeigt uns einen Startwert, Min / Max-Wert und einen aktuellen Wert.
Wählen Sie name, type_desc, start_value, inkrement, minimum_value, maximum_value, current_value von sys aus. Sequenzen mit name = 'UniqueSequenceObject';
Die folgende Tabelle zeigt den Startwert und den Inkrementwert als „1“. Wir haben diese Werte beim Erstellen eines Sequenzobjekts definiert. Außerdem wird ein Min / Max-Wert angezeigt, bei dem es sich um Grenzwerte des Datentyps Integer handelt. Es zeigt auch einen aktuellen Wert "2", den wir in Beispiel 3 verwendet haben, um ihn in einer Variablen zu speichern.
5. Erstellen eines Sequenzobjekts mit Minimal- / Maximalwertbegrenzung
Die folgende Abfrage erstellt ein Sequenzobjekt "TestSequenceObject". Es beginnt mit 100 und wird mit dem Mindestwert "100" und dem Höchstwert "150" um 10 erhöht.
CREATE SEQUENCE dbo.TestSequenceObject AS INT START MIT 100 ERHÖHUNG UM 10 MINVALUE 100 MAXVALUE 150 NO CACHE NO CYCLE GO
Lassen Sie uns einen Startwert mit "TestSequenceObject" abrufen.
DECLARE @SequenceValue asINT; SET @SequenceValue = NÄCHSTER WERT FÜR dbo.TestSequenceObject; SELECT @SequenceValue als SequenceValue;
Ausgabe ------------- Sequenzwert 100
Wenn Sie die folgende Abfrage ausführen, wird der für das Sequenzobjekt definierte maximale Grenzwert überschritten. Ein Fehler wird angezeigt, der angibt, dass wir den Grenzwert für das definierte Sequenzobjekt überschritten haben. Mit einer GO-Anweisung können Sie die Abfrage unter "5" mal ausführen.
WÄHLEN SIE DEN NÄCHSTEN WERT FÜR dbo.TestSequenceObject GO 5
Wir erhalten den folgenden Fehler, wenn der aktuelle Wert den maximalen Grenzwert "150" erreicht.
Meldung 11728, Ebene 16, Status 1, Zeile 16
Das Sequenzobjekt 'TestSequenceObject' hat seinen minimalen oder maximalen Wert erreicht. Starten Sie das Sequenzobjekt neu, damit neue Werte generiert werden können.
** Bei der Ausführung des Stapels ist ein Fehler aufgetreten. Auch weiterhin.
Die Stapelverarbeitung wurde 5 Mal abgeschlossen.
6. Erstellen eines Sequenzobjekts mit der Eigenschaft CYCLE
In Beispiel 5 haben wir die CYCLE-Eigenschaft des Sequenzobjekts nicht aktiviert. Mit dieser Eigenschaft können wir das Objekt der Sequenz von seinem Mindestwert aus neu starten, um den obigen Fehler nicht zu verursachen.
Erstellen Sie ein Sequenzobjekt erneut mit der CYCLE-Eigenschaft und testen Sie, ob es bei Erreichen der maximalen Grenze fehlschlägt. Sobald die Sequenz den maximalen Grenzwert erreicht, beginnt sie wieder mit dem festgelegten Mindestwert.
IF EXISTS (SELECT name FROM Sys.sequences WHERE name = 'TestSequenceObject') DROP SEQUENCE TestSequenceObject CREATE SEQUENCE dbo.TestSequenceObject AS INT START MIT 100 ERHÖHUNG DURCH 10 MINVALUE 100 MAXVALUE 150 KEIN CACHE CYCLE WÄHLEN 10
7. Verwenden eines Sequenzobjekts mit einer INSERT-Anweisung
WENN OBJECT_ID ('Employee', 'U') NICHT NULL DROP TABLE Employee ist; CREATE TABLE-Mitarbeiter (EmployeeId INT, Name VARCHAR (100));
Fügen Sie einige Datensätze in die Employee-Tabelle mit dem Sequenzobjekt ein.
INSERT INTO Employee (EmployeeId, Name) -Werte (nächster Wert für dbo.TestSequenceObject, 'Vishwanath'); INSERT INTO Employee (EmployeeId, Name) -Werte (nächster Wert für dbo.TestSequenceObject, 'Dalvi'); WÄHLEN * VON MITARBEITER;
Ausgabe EmployeeId Name ----------- ------------------- 1 Vishwanath 2 Dalvi
Weitere Informationen zu Datenbank- und SQL-Programmierung finden Sie unter Tech-Recipes.