私はデータを挿入するSQLスクリプトを持っています(現在は千単位のINSERTステートメントを使用しています)。列の1つには、実際にはいくつかの異なるテーブルで一意のIDENTITY型ではなく、 。SQL Server UDFの呼び出し間で状態を維持できますか?
次の利用可能なID(すなわち、最後に使用されたID + 1)を取得するスクリプトにスカラー関数を追加したいと思いますが、これは可能ではないと思われますUDF内からグローバル変数または静的変数を使用すると、一時表を使用できず、関数内から永続表を更新できません。
現在、私のスクリプトは次のようになります。
declare @v_baseID int exec dbo.getNextID @v_baseID out --sproc to get the next available id --Lots of these - where n is a hardcoded value insert into tableOfStuff (someStuff, uniqueID) values ('stuff', @v_baseID + n) exec dbo.UpdateNextID @v_baseID + lastUsedn --sproc to update the last used id
しかし、私は、それは次のようになりたい:オフセットをハードコーディング
--Lots of these insert into tableOfStuff (someStuff, uniqueID) values ('stuff', getNextID())
はお尻の痛みで、エラーが発生しやすくなります。単純なスカラー関数にパッケージ化するのは非常に魅力的ですが、呼び出し間のオフセット・カウンターを維持する方法がないように思われるので、そうすることはできません。それは正しいのですか、私は行方不明のものがあります。
現時点では、SQL Server 2005を使用しています。明確化のため
編集:それは起こらないだろう打つ
2人のユーザー。これはアップグレードスクリプトで、一度だけ実行され、同時に実行されることはありません。
実際のsprocの前にsp_が付いていないので、サンプルコードを修正しました。
通常はidテーブルとsprocを使用してIDを取得していますが、このスクリプトではよりクリーンな方法を探していました。