dbo.GetNextNumber()
呼び出しごとに連番を生成するSQLServer関数が欲しいのですが。私が理解している限り、SQL Serverは関数が決定論的でなければならないと主張しているため、ネイティブT-SQL関数ではこれは不可能です。しかし、これを実行するネイティブT-SQL関数を見せていただければ、本当に私の一日になります。
おそらくこれはCLR関数を使用して記述できるのではないかと思いました。CLR関数は静的であるため、シーケンス番号はset操作の呼び出しコンテキストに格納する必要があります。静的変数として格納すると、同じシーケンスを使用する複数の接続が発生し、それほど連続していない番号になります。組み込みCLRについて、設定操作(選択、更新、削除、挿入)の呼び出しコンテキストがCLR側から到達可能かどうかを確認するのに十分な知識がありません。
一日の終わりに、次のクエリ
select dbo.GetNextNumber() from sysobjects
結果を返す必要があります
1
2
3
4
5
コンテキストをリセットするための別の関数呼び出しが必要な場合は、次のように問題ありません。
exec dbo.ResetSequenceNumbers()
誤解を防ぎ、間違った質問に答える時間を無駄にする可能性を減らすために、私はテーブルのID生成関数を探していません。また、いくつかのハッキング(関数ではなくprocを使用していますが)を認識しています。 ID列を持つ一時テーブル。機能は近いですが、ROW_NUMBER()
カットもしません。
ご回答ありがとうございます
ケマル
PSSQLServerにそのための組み込み関数があるのは驚くべきことです。関数(結合やwhere句で使用できない場合)は非常に簡単で非常に便利ですが、何らかの理由で含まれていません。