忍者ブログ

ゆるいSEの小ネタ集

ゆるキャラ好きのITエンジニアが書くTips。 ゆるキャラ命なSEのIT徒然草 https://itmagic.hatenablog.com/

[SQLServer] IDENTITYで自動採番

×

[PR]上記の広告は3ヶ月以上新規記事投稿のないブログに表示されています。新しい記事を書く事で広告が消えます。

コメント

ただいまコメントを受けつけておりません。

[SQLServer] IDENTITYで自動採番

【IDENTITYとは】
テーブル作成時、列にIDENTITY句を付与することで、INSERT時に自動的に当列に対して1からの連番等を採番できる。


【テーブルcreate文サンプル】
CREATE TABLE [dbo].[TABLEA](
 [KEYNO] [numeric](10, 0) IDENTITY(1,1) NOT NULL,
  1項目目:初期値(1から連番を振るの意味)
  2項目目:増分値(1.2,3...と連番を振る)
※INSERTのSQLにはKEYNOの列に対しては何も書かなくてよい。


【値のリセット・値確認】
■リセット
IDENTITY値を0にリセットする場合。
単に連番を採番するのではなく、別の列の値毎に連番を振りたい場合などは、
以下の方法でリセットする。
DBCC CHECKIDENT('TABLEA', RESEED, 0)  
結果
 ID 情報を調べています。現在の ID 値 '10'。
 DBCC の実行が完了しました。DBCC がエラー メッセージを出力した場合は、システム管理者に相談してください。

※注意事項
これで、次回INSERT時は0から+1した、1が採番される。
但し!truncate後だけは+1されない(=truncate直後に上記を実行すると、次回は0が採番されてしまう)ので注意!
deleteでテーブル0件となった場合は+1されるのだが、truncateの場合と区別がつかない問題が…
これを避けるには、テーブルのデータが0件の場合にtruncateしてしまえば、
IDENTITY値も初期化される(IDENTITY(1,1)なら、次回は1からの採番に戻る)ので、
0からの採番が行われてしまうのを避けることができる。
まあそもそも、ストアドの中で連番値を戻しをやるのはちょっと危ない気もするが…

■値確認
SELECT IDENT_CURRENT('TABLEA');
[参考]
http://www.atmarkit.co.jp/ait/articles/0104/04/news001.html
PR

コメント

ただいまコメントを受けつけておりません。

プロフィール

HN:
ゆるキャラ命
性別:
非公開

P R