

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で質問しましょう!
似たような質問が見つかりました
- MySQL SQLで日付別のIDを生成するには 3 2022/10/09 10:34
- Visual Basic(VBA) 【ExcelVBA】Powerクエリーでいうピボット解除と同じ処理をVBAで 4 2022/07/06 17:09
- Ruby pandasでsqlite3にテーブル作成・追加・読み出しでindexの取り扱い方教えてください 5 2023/03/08 09:57
- Access(アクセス) アクセス 削除するレコードを含んだテーブルを指定してくださいのエラー対処方法 1 2022/11/24 15:01
- Yahoo!メール YahooIDをパスワード形式にしただけなのに、利用規約違反とされて電話番号が使えなくなりました 1 2023/03/15 20:44
- Yahoo!メール Yahooアカウントにログインできないです。 1 2023/05/26 09:01
- SQL Server ACCESSで表が作りたく、そのためのSQL文や設定方法を教えてください。 1 2022/08/15 12:28
- MySQL 次の時間帯の勝率の合計を求めるSQL文 1 2023/07/04 17:12
- Yahoo!メール YahooIDをパスワード形式にしただけなのに、利用規約違反とされて電話番号が使えなくなりました 3 2023/03/25 04:08
- Access(アクセス) アクセス テーブルの空白を変数に置換するボタンが作りたい 4 2022/07/08 11:19
このQ&Aを見た人はこんなQ&Aも見ています
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
商品番号を入力すると、商品名...
-
フィールド名を取得する方法に...
-
LEFT JOIN あいまいな外部結合
-
IDの欠番
-
updateでグループ化
-
Accessのフォームで思った順番...
-
各伝票に対して明細を1行目だけ...
-
並び替え
-
ACCESSでフォーム上のオブジェ...
-
差し込み後、元データを変更し...
-
datetime型でNULL値を入れたい。
-
エクセルで最後の文字だけ置き...
-
外部参照してるキーを主キーに...
-
SQLで特定の項目の重複のみを排...
-
EXISTSを使ったDELETE文
-
SELECT 文 GROUP での1件目を...
-
カーソル0件の時にエラーを発生...
-
UPDATE文のWHERE条件に他のテー...
-
フィルターかけた後、重複を除...
-
for whichの使い方
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
updateでグループ化
-
LEFT JOIN あいまいな外部結合
-
商品番号を入力すると、商品名...
-
Accessのフォームで思った順番...
-
orace SQL文のエラー(ORA-0092...
-
特定条件での連番の振り方を教...
-
IDの欠番
-
2つのテーブルを結合して最大値...
-
各伝票に対して明細を1行目だけ...
-
Word差し込み印刷 数式について
-
アクセスのフォームで連動した...
-
ACCESSでテキストデータ...
-
エクセルでリピート率
-
Accessレポート 複数条件での集計
-
ファイルメーカーからCSVへのエ...
-
accessフォームのボタン→レポー...
-
アクセス メインフォームの伝...
-
文字列のあるキーワードから開...
-
ACCESSでフォーム上のオブジェ...
-
同一テーブルのデータを検索条...
おすすめ情報