A propos des définitions de clé suivante
La fonctionnalité Clés suivantes permet aux transactions à exécution longue d'obtenir une valeur suivante pour une entrée de colonne, avec ou sans préfixe et sans bloquer les autres processus qui font la même chose. Ces types d'appel de procédure enregistrée sont paramétrés à l'aide de l'écran Métadonnées col. schéma app, dans le champ Générateur(s).
Comment fonctionnent les définitions de clé suivante
La procédure enregistrée racine pour des appels de clé suivante ressemble à ceci :
EXEC @Severity = dbo.Next2SubKeySp
@TableName = @TableName
, @ColumnName = @ColumnName
, @Prefix = @Prefix
, @KeyLength = @KeyLength
, @SubKey = @SubKey
, @Increment = @Increment
, @KeyVal = @KeyVal OUTPUT
, @Infobar = @Infobar OUTPUT
Par exemple : Le code d'application pourrait avoir par exemple une colonne Numéro commande client qui pourrait ou non utiliser un préfixe. Ainsi, un numéro de commande client avec un préfixe TG peut être TG00000109 et un numéro de commande client sans aucun préfixe peut être 0000000547.
Si deux processus appellent alors le code Next2SubKeySp pour la table CustomerOrder et la colonne CoNum en même temps, en demandant la clé suivante pour le préfixe TG, ils obtiendraient les deux valeurs suivantes dans la table NextKeys (TG00000110 et TG00000111). Il n'y aurait aucun blocage et les valeurs seraient toutes deux stockées dans la table NextKeys.
La synchronisation des valeurs de clé suivante nécessite que le système revienne aux tables de base pour déterminer quelles sont les valeurs élevées actuelles pour chaque préfixe. C'est là que les définitions de clé suivante entrent en jeu. Ces définitions contiennent les métadonnées indiquant quelles tables et colonnes comportent les associations de clé suivante.
A propos des spécifications principales et secondaires
Dans certains cas, vous pourriez avoir une table d'archivage qui comprend les mêmes associations Clé suivante qu'une autre table. Par exemple, vous pourriez avoir une table, appelée CustomerOrderHistory, qui contient les données historiques qui ont été archivées à partir de la table CustomerOrder. La table CustomerOrder, ensuite, serait considérée comme la table "principale". La table CustomerOrderHistory serait considérée comme une table "secondaire" qui doit également être vérifiée lors de la synchronisation des clés suivantes, car l'une ou l'autre table pourrait contenir les valeurs clés maximum actuelles.
A propos des sous-clés
Les colonnes de sous-clé permettent de regrouper une clé suivante en fonction de la valeur d'une autre colonne.
Par exemple, un InteractionID peut être stocké dans une table appelée DailyInteraction, basée sur la colonne de sous-clé DayOfInteraction. Le souhait dans ce cas est que InteractionID commence à 1 et s'incrémente avec chaque entrée supplémentaire, mais seulement pour une valeur DayOfInteraction donnée. Pour afficher la valeur maximale actuelle pour un jour donné, vous changeriez alors la valeur de la sous-clé dans la requête de clé suivante.
DayOfInteraction | InteractionID |
---|---|
07/04/1776 | 1 |
07/04/1776 | 2 |
07/04/1776 | 3 |
07/05/1776 | 1 |
07/05/1776 | 2 |
La synchronisation de clé suivante dans ce cas examinerait la table DailyInteraction et trouverait l'InteractionID maximum actuel pour chaque valeur de DayOfInteraction. Dans cet exemple, il y aurait deux ensembles de valeurs : 07/04/1776, 3 et 07/05/1776, 2. Ces valeurs seraient insérées dans la table NextKeys afin que le traitement de clé suivante puisse se dérouler correctement pour cette table et cette colonne.
A propos de la table principale et la colonne principale
Les options Table principale et Colonne principale ne sont utilisées que pour un cas de nombre entier uniquement spécialisé de traitement de sous-clé. Les clés suivantes sont généralement basées sur des caractères, mais dans certains cas, elles sont basées sur des nombres entiers avec une colonne Sous-clé définie dans une table séparée.
Par exemple, supposons qu'une table Journal possède une colonne BatchID et une colonne Séquence et que la colonne Séquence est un entier. Dans ce cas, une table séparée contenant la liste des valeurs BatchID, qui sont des valeurs de sous-clé, doit être définie. Les données de sous-clé non principale sont toujours basées sur des caractères et les données de sous-clé principale sont toujours basées sur des nombres entiers.