SQL Server 2008 を使用して、テーブル a、テーブル b、およびテーブル c の 3 つのテーブルを作成します。
すべてにID
列がありますが、テーブル a と b のID
列は anidentity integer
であり、テーブル c のID
列はvarchar
型です
現在、ストアド プロシージャは名前パラメーターを取得し、特定のロジックに従って、テーブル a またはテーブル b に挿入し、ID を取得し、接頭辞に 'A' または 'B' を付けてから、テーブル c に挿入します。
問題は、テーブル CID
の列に重複した値が含まれる可能性があることです。つまり、テーブル A の ID が 2 の場合、テーブル C の列に既に 'A2'、'A3'、'A5' が存在する可能性がありID
ます。T-SQL の記述方法テーブル C で次に利用可能な値を特定するクエリを実行し、それに応じてテーブル A/B を更新しますか?
[更新] これが現在のステップです。1. 入力パラメータに応じて、テーブル A またはテーブル B に挿入します 2. 初期化シード値 = @@Identity 3. ID 値を計算して、接頭辞 'A' または追加 ' でテーブル C に挿入しますB' とシード値 4. ステップ 3 の ID 値でテーブル C 内の一致するレコードを探します。レコードが見つからない場合は挿入し、そうでない場合はシード値を 1 増やしてからステップ 3 を繰り返します。
問題は特定の値の範囲にあり、テーブル C ID に巨大な値のブロックが存在する可能性があります。つまり、A3000 から A500000 がテーブル C ID に存在し、既存のロジックに従う場合、データベース クエリは非常に遅くなります。利用可能な最小数を賢く取得するためのロジックを理解する必要があります (接頭辞なし)
説明するのは難しいです。これがより理にかなっていることを願っています。これについて何か助けていただければ幸いです。