

No.3ベストアンサー
- 回答日時:
> 失敗時にIDENTITYを使ったフィールドの番号を戻すにはどうしたらよいでしょうか?
DB 任せの採番ですから仕方ないです。
嫌なら自前で採番するようにします。
> IDにはIDENTITYを使わないほうがいいのでしょうか。
この場合の "ID" をどう認識していらっしゃるのかわかりませんが、例えば伝票番号のように、使用者側の目に見える番号で、なおかつ(どんなときも)連番が要求される性格の番号なら IDENTITY を使わない方が良いですよ、という主張です。
人の目に見えてしまうから「欠番なんとかならないの?」という意見が出てしまうのです。
そういった番号ではなくて「単純に DB のシステム内で一意にするための番号」というのであれば IDENTITY を使う列をレコードの主キーにしてもかまわないと思います。
そこで、「人の目に見える番号」の部分をどうやって組み立てるかは、何の情報を管理する DB なのかによって違ってきます。これはビジネスルールの範囲です。
伝票番号であれば「正常に登録できたレコードにおいて連番が保証される番号」が採番できるようにする仕組みにしたり「政情に登録できたレコードにおいて、登録年の中で連番が保証される番号」が採番できるようにしたりとか。
No.2
- 回答日時:
この回答への補足
ありがとうございます。
トランザクションをためしてみたのですが、成功時にのみコミットするようにしたのですが、失敗した場合、やはりIDENTITYを設定したフィールドは番号が抜けてしまうようです。失敗時にIDENTITYを使ったフィールドの番号を戻すにはどうしたらよいでしょうか?

No.1
- 回答日時:
そういう人の目に触れて、なおかつビジネスルール敵に連番を保証しなくちゃならない番号に IDENTITY の列を使わない方がいいですよ。
IDENTITY の列はあくまでも内部管理的な連番ってことで。
連番の振り方はいろいろあると思いますが、タイミング的には
INSERT や UPDATE のトリガーの中で採番する。
INSERT や UPDATE をストアドプロシージャで行うようにし、その中で採番する。
ただしロックをして重複を回避する。
番号の取り方は
最大値 + 1 を採用する。
番号管理テーブルを使う。
など。
DELETE して穴が開いた場合にどうするつもり? って点も大きな問題。
それ以降のレコードを全部前に詰める。(リレーションでぶら下がっているレコードも全て詰める必要があるんで絶対にやりたくない方法)
INSERT 時に空き番号を探してそこへ登録する。(処理が重そう)
# というか、そんな重要な番号が動いちゃって構わないの? という素朴な疑問。
この回答への補足
ありがとうございます。
人にDBのバックアップ&リストアするとIDが連番に変わると聞いたので
(IDENTITYをセットしていると)、IDが抜けるとまずいと思い質問しました。
IDにはIDENTITYを使わないほうがいいのでしょうか。
>DELETE して穴が開いた場合にどうするつもり
今回データは蓄積してゆくので幸いDELETEはありません。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
このQ&Aを見た人はこんなQ&Aも見ています
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
2つのテーブルを結合して最大値...
-
IDの欠番
-
Accessのフォームで思った順番...
-
orace SQL文のエラー(ORA-0092...
-
アクセス メインフォームの伝...
-
特定条件での連番の振り方を教...
-
Word差し込み印刷 数式について
-
updateでグループ化
-
同一テーブルのデータを検索条...
-
LEFT JOIN あいまいな外部結合
-
商品番号を入力すると、商品名...
-
並び替え
-
別のDB(Table)からの複数行の...
-
同じサーバーで、異なるデータ...
-
Unionした最後にGROUP BYを追加...
-
【SQL文】Insert into文で文法...
-
[MySQL] 1対多のリレーションで...
-
DB設計について
-
MySQLにてCOUNTした値を更にCOUNT
-
SQL xx件目からxx件目まで...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
updateでグループ化
-
LEFT JOIN あいまいな外部結合
-
IDの欠番
-
Accessのフォームで思った順番...
-
2つのテーブルを結合して最大値...
-
orace SQL文のエラー(ORA-0092...
-
商品番号を入力すると、商品名...
-
各伝票に対して明細を1行目だけ...
-
Word差し込み印刷 数式について
-
エクセルでリピート率
-
文字列のあるキーワードから開...
-
GROUP BY関係で、こんなことは...
-
ACCESSのテーブル設計と...
-
フィールド名を取得する方法に...
-
同一テーブルのデータを検索条...
-
特定条件での連番の振り方を教...
-
SQLで追加処理
-
並び替え
-
access で計算結果を表に代入す...
-
Accessの追加クエリの方法(重...
おすすめ情報