Visual Basic 中学校 掲示板 投稿の管理
タグのない投稿を抽出
統計
RSS
Visual Basic 中学校
投稿一覧
Dapperを用いたマッピングとデータベースのリレーショナルについて
この投稿へのリンク
https://keijiban.umayadia.com/ThreadDetail.aspx?ThreadId=30844#CommentId85665
この投稿の削除
削除パスワード
削除する
コメント本文
投稿者
魔界の仮面弁士
 (社会人)
投稿日時
2023/3/1 10:47:21
番号を予約する手法を採る場合は、IDENTITY よりも SEQUENCE の方が向いています。
複数の番号を予約するための sp_sequence_get_range も使えますしね。
https://learn.microsoft.com/ja-jp/sql/t-sql/statements/create-sequence-transact-sql?WT.mc_id=DT-MVP-8907&view=sql-server-ver16
https://learn.microsoft.com/ja-jp/sql/relational-databases/system-stored-procedures/sp-sequence-get-range-transact-sql?WT.mc_id=DT-MVP-8907&view=sql-server-ver16
あるいは UNIQUEIDENTIFIER型 にしておいて、NEWID() 等で生成する手法もあります。
IDENTITY を使う場合、sp_sequence_get_range に相当する機能が無いため、
案1) 1 行ずつ挿入して、 IDENT_CURRENT / SCOPE_IDENTITY / @@IDENTITY を都度取得
案2) ワークテーブルに複数行挿入し、トリガーでどうにかする
などの手間がかかってしまうので、自分は敬遠しています。
ID 自体に意味のない、アクセスログの記録なんかには便利なのですが、
外部キーとして使うのには向いていないと思います。
🔹 @@IDENTITY
現在のセッション内で、
どのテーブルで生成されたかに関わらず、
最後にインサートされた IDENTITY の値を返す。
🔹 SCOPE_IDENTITY()
現在のセッション内かつ現在のスコープ内で、
どのテーブルで生成されたかに関わらず、
最後にインサートされた IDENTITY の値を返す。
🔹 IDENT_CURRENT('table_name')
セッションやスコープに関わらず、
指定したテーブルに対して
最後に生成された IDENTITY の値を返す。