データを挿入するSQLスクリプトがあります(現在数千のINSERTステートメントを介して)列の1つに、いくつかの異なるテーブル間で実際に一意の一意の識別子(IDENTITY型ではなく、単なる古いint)が含まれています。
次の利用可能な ID (つまり、最後に使用された ID + 1) を取得するスカラー関数をスクリプトに追加したいのですが、グローバルまたはUDF 内から静的変数を使用することができないため、一時テーブルを使用できず、関数内から永続テーブルを更新できません。
現在、私のスクリプトは次のようになっています。
@v_baseID int を宣言する exec dbo.getNextID @v_baseID out --sproc で次に使用可能な ID を取得します -- これらの多く - n はハードコードされた値です tableOfStuff (someStuff, uniqueID) 値に挿入 ('stuff', @v_baseID + n ) exec dbo.UpdateNextID @v_baseID + lastUsedn --sproc を使用して、最後に使用された ID を更新します
しかし、私はそれを次のようにしたいと思います:
-- たくさん tableOfStuff (someStuff, uniqueID) 値 ('stuff', getNextID() ) に挿入します。
オフセットをハードコーディングするのは骨の折れる作業であり、エラーが発生しやすくなります。単純なスカラー関数にパッケージ化することは非常に魅力的ですが、呼び出し間のオフセット カウンターを維持する方法がないように見えるため、その方法では実行できないと考え始めています。そうですか、それとも何か足りないものがありますか。
現在、SQL Server 2005 を使用しています。
明確化のための編集:
2 人のユーザーがヒットすることはありません。これは一度だけ実行され、同時に実行されることのないアップグレード スクリプトです。
実際の sproc の前に sp_ が付いていないため、サンプル コードを修正しました。
通常の使用では、必要に応じて ID テーブルと sproc を使用して ID を取得します。このスクリプトでそれを行うためのよりクリーンな方法を探していました。基本的には、一連のデータを db にダンプするだけです。