次のキー定義について
[次のキー] 機能では、長時間実行されているトランザクションは、接頭辞が有る無しにかかわらず、同じ処理を行っているその他の処理をブロックすることなく、カラムエントリの以下の値を取得できます。この種類のストアドプロシージャの呼び出しは、[ジェネレータ] フィールドの [アプリケーションスキーマカラムメタデータ] フォームを使用して設定できます。
次のキー定義が作動する仕組み
[次のキー] 呼び出しのルートストアドプロシージャは、以下のように表示されます。
EXEC @Severity = dbo.Next2SubKeySp
@TableName = @TableName
, @ColumnName = @ColumnName
, @Prefix = @Prefix
, @KeyLength = @KeyLength
, @SubKey = @SubKey
, @Increment = @Increment
, @KeyVal = @KeyVal OUTPUT
, @Infobar = @Infobar OUTPUT
例:例えば、アプリケーションコードには、[受注オーダ番号] カラムがある場合があります。これは、接頭辞を使用するとは限りません。そのため、[TG] の接頭辞を含む顧客受注オーダ番号は TG00000109 となり、接頭辞を全く含まない顧客受注オーダ番号は、0000000547 となります。
2 つが処理されたら、次に CustomerOrder テーブルおよび CoNum カラムに Next2SubKeySp コードを呼び出します。同時に、接頭辞 TG の次のキーを要求することで、NextKeys テーブルから次の 2 つの値(TG00000110 および TG00000111)を取得します。ブロックされることなく、両方の値は NextKeys テーブルに保存されます。
[次のキー] 値の同期を行うには、システムが基準テーブルに戻り、各接頭辞に対する現在の高い値が何であるかを調べる必要があります。これは、[次のキー] 定義が作動し始める状況です。これらの定義には、[次のキー] の関連付けを含むテーブルおよび列を示すメタデータが含まれています。
主要仕様および二次仕様について
場合によっては、別のテーブルと同じ [次のキー] の関連付けを含む保存テーブルがあることがあります。例えば、CustomerOrder テーブルから保存された履歴データを持つ、CustomerOrderhistroy という名前のテーブルがあるとします。すると、CustomerOrder テーブルは、「一次」テーブルとして考慮されます。CustomerOrderHistory テーブルは、「二次」テーブルとして考慮されます。これは、いずれかのテーブルが現在の最大キー値を含む可能性があるため、[次のキー] を同期するときにチェックされる必要があります。
サブキーについて
[サブキー] カラムにより、別のカラムの値に基づいて [次のキー] をグループ化できます。
例えば、[InteractionID] は、[DayOfInteraction] サブキーカラムに基づき、DailyInteraction というテーブルに保存されるとします。この場合必要なのは、[InteractionID] を 1 から開始し、各追加入力で、与えられた [DayOfInteraction] 値にのみ増加するようにすることです。与えられた日の現在の最大値を表示するには、[次のキー] 要求で [サブキー] 値を変更します。
DayOfInteraction | InteractionID |
---|---|
07/04/1776 | 1 |
07/04/1776 | 2 |
07/04/1776 | 3 |
07/05/1776 | 1 |
07/05/1776 | 2 |
この場合 [次のキー] の同期は、DailyInteraction テーブルを参照し、各 [DayOfInteraction] 値の現在の最大 [InteractionID] を調べます。この例では、以下の 2 つのセットの値があります。07/04/1776, 3 および 07/05/1776, 2 です。これらの値は、NextKeys テーブルに挿入されます。そのため、[次のキー] プロセスは、テーブルおよびカラムに適切に処理を行うことができます。
マスタテーブルおよびマスタカラムについて
[マスタテーブル] および [マスタカラム] オプションは、サブキー処理の特殊整数のみのケースにのみ使用されます。[次のキー] は一般的には文字ベースです。ただし、特定の状況においては、個別のテーブルで定義された [サブキー] カラムを含む整数ベースです。
例えば、ジャーナルテーブルに [BatchID] カラムおよび [シーケンス] カラムがあるとすると、この [シーケンス] カラムが整数ベースとなります。この場合、サブキー値である [BatchID] 値のリストを含む別のテーブルが定義される必要があります。非マスタサブキーデータは常に文字ベースで、マスタサブキーデータは常に整数ベースです。