- - PR -
VB2005で自動採番
1
投稿者 | 投稿内容 | ||||||||
---|---|---|---|---|---|---|---|---|---|
|
投稿日時: 2008-02-14 23:11
たびたび申し訳ありません。
VB2005+SQLSERVERで現在社員情報の管理ソフトを作成開発をしていますが、社員IDをACCESSの様なオートナンバーで登録したいと思ってるのですが、良い方法が見当たらなく困っております。何か良い方法はありませんでしょうか? 色々なサイトを調べたところ、select max(ID)で取得後+1をするとありましたが何か問題があるような事がかかれていました。(理解は出来なかったのですが) よろしくお願いします。 | ||||||||
|
投稿日時: 2008-02-14 23:44
SQLServerのバージョンが不明ですが、2000以上であればこちらが参考になると思います。
(7.0以前は環境が無いので分かりません) http://www.atmarkit.co.jp/fnetwork/rensai/sql11/sql1.html identityで上記ページ内を検索してみてください。
該当のデータがそのデータ型の取り得る最大値になるケースや、途中に番号の抜けが出てしまうケースでは少々問題がありそうです。 | ||||||||
|
投稿日時: 2008-02-15 09:18
あとは max(ID) を取って、登録する前に別のクライアントなどからアクセス された場合は、同じ値をとりうる可能性もありますね。 そうなるともはや ID の意味はなくなってしまうと思います。 なので、小手先のやり方よりはシステムで用意されている identity を利用 するのが素直かなぁと思います。 _________________ ぽぴ王子@わんくま同盟 ぽぴ王子の人生プログラミング中 / ぽぴンち。 | ||||||||
|
投稿日時: 2008-02-15 10:01
直接の回答ではありませんが、
私自身も以前、必要に迫られて調べたことがあったので、 そのとき見つけた過去スレッドを貼っておきます。 シーケンスと採番テーブルの選択 ユニークなIDの自動生成 | ||||||||
|
投稿日時: 2008-02-15 10:16
パフォーマンス上の問題。複数のセッションからデータのINSERTが行われる場合、IDの重複を避けるためにはロックをかけて一度に一つのセッションしか挿入できないように実装する必要がある。この部分がボトルネックになるために、複数の端末から大量にレコードが作られる場合にはパフォーマンスの悪さが問題になる。端末毎に連番となるレコードIDを割り当てるような形なら、パフォーマンス上はさして問題にはならない。 二つ目の問題はレコードの削除が行われる場合。最後に挿入したレコードが削除されると、同じIDのレコードが再び作られることになる。 大抵のデータベースはユニークIDを生成するための独自の仕組みを用意しているので、それを利用するのが良い。Accessならオートナンバーだし、MSSQLならidentity。 | ||||||||
|
投稿日時: 2008-02-15 23:54
お世話になっております。
やはりidentityを設定することにします。 皆様大変ありがとうございました。 |
1