Guide du débutant sur les objets de séquence dans SQL Server

SQL Server a pris en charge Objets SEQUENCE depuis la création de SQL Server 2012 et des éditions ultérieures. La base de données Oracle a pris en charge les objets SEQUENCE depuis le début. Vous pouvez lire l'article archivé sur Tech-Recipes à l'aide de SEQUENCE dans Oracle.

Nous pouvons créer un SEQUENCE dans SQL Server pour générer des valeurs numériques séquentielles selon les directives fournies. Les objets SEQUENCE peuvent être classés avec une colonne IDENTITY dans SQL Server, mais contrairement aux colonnes IDENTITY, les objets SEQUENCE ne sont pas liés aux objets Table. IDENTITY est considéré comme une propriété de table attachée à des tables, alors que les objets SEQUENCE sont créés indépendamment et peuvent être utilisés avec des instructions DML telles que INSERT et UPDATE ou pour référencer un objet SEQUENCE séparément. Ce tutoriel est un guide du débutant sur les objets SEQUENCE dans SQL Server.

Comment différencier les propriétés SEQUENCE et IDENTITY

1. Les objets séquence ne dépendent pas des tables, alors que les propriétés d'identité sont associées à des tables.

2. Les objets séquence sont utilisés pour générer des valeurs séquentielles sur plusieurs tables avec l'étendue de la base de données. La propriété Identity peut être utilisée pour générer des nombres incrémentiels au niveau de la table.

3. Les objets séquence ont été introduits avec une édition de SQL Server 2012, alors que les propriétés d'identité sont prises en charge avec les éditions antérieures de SQL Server.

4. Nous pouvons réinitialiser le numéro de séquence actuel et la taille de pas incrémentielle d'un objet Sequence. Avec IDENTITY, nous pouvons RESEED à une valeur spécifique, mais nous ne pouvons pas modifier la taille du pas incrémentiel.

5. Les objets de séquence peuvent être mis en cache dans la mémoire pour améliorer les performances, alors que les valeurs d'identité ne peuvent pas être mises en cache.

6. Avec une séquence, vous pouvez définir la valeur Min / Max. Avec la propriété Identity, ceci n'est pas supporté.

 

La syntaxe des objets SEQUENCE

CREATE SEQUENCE [schéma]. [Nom_de la séquence] [AS  ] [COMMENCER PAR] [AUGMENTER DE] [MINVALUE | NO MINVALUE] [MAXVALUE | NO MAXVALUE] [CYCLE | AUCUN CYCLE] [valeur CACHE | NO CACHE]; 

Arguments d'un objet SEQUENCE

1. Schéma: Vous pouvez définir un nom de schéma lors de la création d'objets de séquence. Si aucun schéma n'est fourni, dbo schéma est utilisé par défaut.

2. Nom de séquence : Un nom unique à spécifier pour identifier un objet séquence

3. Type de données: Les types de données autorisés avec les objets séquence sont TinyInt, SmallInt, Int, Decimal et BIGINT. Si aucun type de données n'est fourni, le type de données BIGINT est utilisé par défaut.

4. COMMENCER AVEC: La première valeur à renvoyer par l'objet séquence

5. AUGMENTATION DE: Une valeur à utiliser pour incrémenter ou décrémenter (si négatif) l'objet séquence; Cette valeur ne peut pas être 0. Si la valeur INCREMENT BY est positive, les objets de séquence sont ascendants. Si négatif, alors ils descendent.

6. MINVALUE - Valeur limite minimale pour une séquence. C'est un paramètre facultatif. Si elle n'est pas définie, elle prend la valeur minimale de la plage de types de données définie.

7. VALEUR MAX: Valeur limite maximale pour une séquence. C’est un paramètre facultatif. Si elle n’est pas définie, elle prend la valeur maximale de la plage de types de données définie.

8. CYCLE | NOCYCLE: Si vous souhaitez redémarrer la valeur d'un objet de séquence à partir d'une valeur minimale ou maximale, paramètre facultatif, la valeur par défaut est NOCYCLE.

9. CACHE | NOCACHE: Augmentez les performances en activant le cache pour réduire les E / S du disque; CACHE aide à lire la valeur actuelle de la mémoire.

 

Exemples: Utilisation d'objet SEQUENCE avec des requêtes SQL

1. Créez un objet de séquence avec un nom de schéma, un nom de séquence, un type de données, commencez par, et incrémentez par des arguments.

L'exemple suivant va créer un objet séquence nommé "UniqueSequenceObject." Cela commencera à partir de 1, et la valeur est incrémentée de 1 chaque fois que nous utilisons «UniqueSequenceObject».

IF EXISTS (nom SELECT de Sys.sequences WHERE nom = 'UniqueSequenceObject') DROP SEQUENCE UniqueSequenceObject GO CREER LA SEQUENCE dbo.UniqueSequenceObject AS INT DEBUT AVEC 1 AUGMENTATION DE 1 SAUF MINVALUE SANS MAXVALUE SANS CYCLE OK 

2. Comment obtenir la première valeur à l'aide d'un objet de séquence

L'instruction suivante renverra la valeur «1» pour obtenir la première valeur à l'aide de «UniqueSequenceObject».

SELECT value = NEXT VALUE FOR dbo.UniqueSequenceObject; 
Valeur de sortie ------- 1 

3. Stockage d'une valeur d'objet de séquence dans une variable

L'instruction suivante va déclarer une variable et stocker la valeur de séquence suivante (c'est-à-dire «2») dans la variable @SequenceValue.

DECLARE @SequenceValue as INT; SET @SequenceValue = NEXT VALUE FOR dbo. UniqueSequenceObject; SELECT @SequenceValue as SequenceValue; 
Output SequenceValue -------------------- 2 

4. Affichage des propriétés d'un objet de séquence à l'aide de la vue système

La requête suivante utilise la vue du système sys.sequence pour fournir plus d'informations sur l'objet séquence «UniqueSequenceObject». Il nous montre une valeur de départ, une valeur min / max et une valeur actuelle.

sélectionnez nom, type_desc, valeur_début, incrément, valeur_val, valeur_vaculaire, valeur actuelle, à partir de sys. séquences où name = 'UniqueSequenceObject'; 

Le tableau ci-dessous indique que la valeur initiale et la valeur d'incrémentation sont «1». Nous avons défini ces valeurs lors de la création d'un objet de séquence. Il affiche également une valeur min / max qui sont des valeurs limites du type de données Integer. Il affiche également une valeur actuelle «2» que nous avons utilisée dans l'exemple 3 pour le stocker dans une variable.

5. Création d'un objet de séquence avec limite de valeur minimale / maximale

La requête suivante crée un objet séquence "TestSequenceObject". Il commence par 100 et est incrémenté de 10 avec la valeur minimale «100» et la valeur maximale «150».

CRÉER UNE SÉQUENCE dbo.TestSequenceObject AU DÉBUT INT DE 100 AUGMENTATION DE 10 MINVALUE 100 MAXVALUE 150 SANS CACHE SANS CYCLE GO 

Récupérons une valeur de départ à l'aide de «TestSequenceObject».

DECLARE @SequenceValue asINT; SET @SequenceValue = VALEUR SUIVANTE DE dbo.TestSequenceObject; SELECT @SequenceValue as SequenceValue; 
Sortie ------------- SequenceValue 100 

En exécutant la requête ci-dessous, nous allons dépasser la valeur limite maximale définie pour l'objet séquence. Il y aura une erreur indiquant que nous avons franchi la valeur limite pour l'objet séquence défini. À l'aide d'une instruction GO, nous pouvons exécuter la requête ci-dessous «5» fois.

SÉLECTIONNER LA VALEUR SUIVANTE DE dbo.TestSequenceObject GO 5 

Nous obtenons l'erreur suivante une fois que la valeur actuelle atteint la valeur limite maximale «150».

Msg 11728, Niveau 16, Etat 1, Ligne 16
L'objet de séquence 'TestSequenceObject' a atteint sa valeur minimale ou maximale. Redémarrez l'objet de séquence pour permettre la génération de nouvelles valeurs.
** Une erreur s'est produite lors de l'exécution du lot. Continuer.
L’exécution du lot a été complétée 5 fois.

6. Création d'un objet Séquence avec la propriété CYCLE

Dans l'exemple 5, nous n'avons pas activé la propriété CYCLE de l'objet séquence. En utilisant cette propriété, nous pouvons redémarrer l'objet de la séquence à partir de sa valeur minimale pour éviter de renvoyer l'erreur ci-dessus.

Créons à nouveau un objet séquence avec la propriété CYCLE et testons s'il échoue lorsqu'il atteint la limite maximale. Une fois que la séquence atteint la valeur limite maximale, elle recommencera à partir de la valeur minimale définie.

IF EXISTS (nom SELECT de Sys.sequences WHERE nom = 'TestSequenceObject') DROP SEQUENCE TestSequenceObject CREER LA SEQUENCE dbo.TestSequenceObject AS INT DEBUT DE 100 SAUVETAGE TestSequenceObject CREATE SEQUENCE dbo.TestSequenceObject AS SELECT = = VALEUR SUIVANTE dix 

7. Utilisation d'un objet de séquence avec une instruction INSERT

SI OBJECT_ID ('Employee', 'U') N'EST PAS NUL DROP TABLE Employee; CREATE TABLE Employee (EmployeeId INT, Nom VARCHAR (100)); 

Insérez quelques enregistrements dans la table des employés à l'aide d'un objet séquence.

INSERT INTO Employee (EmployeeId, Name) valeurs (valeur suivante pour dbo.TestSequenceObject, 'Vishwanath'); INSERT INTO Employee (EmployeeId, Name) valeurs (valeur suivante pour dbo.TestSequenceObject, 'Dalvi'); SELECT * FROM EMPLOYEE; 
Nom de l'employé de sortie ----------- ------------------- 1 Vishwanath 2 Dalvi 

En savoir plus sur la programmation de base de données et SQL publiée sur Tech-Recipes.