1

私は現在、いくつかのレコードに「管理番号」を割り当てるプロセスが必要なプロジェクトに取り組んでいます。これは、後日実行して、管理番号が変更されていないレコードを含め、これらのレコードに未使用の管理番号を割り当てることもできる必要があります。これらの管理番号は、外部エンティティによって事前に割り当てられ、9 桁の長さです。通常、会社が生成する推定レコード数に応じて範囲が決まります。たとえば、ある企業は 50 が必要だと見積もったため、790123401 から 790123450 の範囲を割り当てました。

問題: 現在、カーソルを使用してこれらの番号を割り当てています。個々のレコードごとに、シーケンスの最初の番号が既にテーブルに取り込まれているかどうかを確認し、そうであれば、番号を増やして再確認します。このチェックは、テーブル内の各レコードに対して何度も行われます。ある企業には 17,000 のレコードがあり、すべての数字を取得した場合、レコードごとに、最悪で 17,000 回反復する可能性があることを意味します。

最初の実行では制御番号が多くのレコードに割り当てられるため、最初の実行でのすべての繰り返しはまったく気にしません。私の問題は、後でレコードが変更され、それに関連付けられた管理番号が必要になった場合、プロセスを再実行すると、未使用の番号が取得されるまで、使用可能な各番号を通過することになります。

カーソルを使用せずにシーケンスを使用する例を数多く見てきましたが、ほとんどは Oracle に固有のものです。この特定のプロジェクトに SQL Server 2005 を使用しています。

提案?

4

1 に答える 1