1. ホーム
  2. データベース
  3. mssql2005

SQL server 2005で自動番号フィールドを設定する方法

2022-01-09 01:39:55

テーブルに新しいレコードが追加されたときに自動的に生成されてカラムに格納されるシーケンス番号を再定義したい場合、カラムの識別属性を変更することができます。識別属性は、各テーブルで1つのカラムにのみ設定できます。
ID 属性を持つ列には、テーブル内の各行を一意に識別する、システムが生成した連続した値(たとえば、従業員 ID 番号)が含まれます。ID 列を含むテーブルに値を挿入すると、Microsoft SQL Server は最後に使用された ID 値(ID 種属性)および列の作成時に指定された増分値(ID 増分値属性)に基づいて次の ID を自動的に生成します。

注意

Identity属性は、NULL値を許さず、データ型がdecimal, int, numeric, smallint, bigint, tinyintのカラムにのみ設定することができます。また、主キーカラムに ID 属性を設定することはできません。
列識別属性の変更

1. オブジェクト・エクスプローラーで、データ型を変更したい列があるテーブルを右クリックし、[修正] をクリックします。これにより、そのテーブルがテーブルデザイナーで開かれます。
変更したい列の[空白を許可する]チェックボックスをオフにします。
3. 列のプロパティ]タブで、[識別仕様]プロパティを展開します。
4. Yes Logo サブプロパティのグリッドセルをクリックし、ドロップダウン・リストから「Yes」を選択します。
Identification Seedのセルに値を入力します。この値は、テーブルの最初の行に割り当てられます。デフォルトでは値1が割り当てられます。
6. 6. 「quot;Identity Increment"」セルに値を入力する。この値は、後続の各行に対する識別子シードを基にしたインクリメントである。デフォルトでは、この値には1が割り当てられている。

例えば、受注テーブルに追加された各行に対して、10000から始まり、毎回10ずつ増加する5桁の受注IDを自動生成したいとします。10.
テーブルの ID プロパティを変更した場合、既存の ID 値は保持されます。新しい設定値は、テーブルに追加された新しい行にのみ適用されます。

注意

頻繁に削除操作を行うテーブルに ID カラムがある場合、ID 値の間に不連続性が発生します。この不連続性を避けるために、marker 属性を使用しないでください。

グリッド セル外をクリックするか、Tab キーで別のグリッド セルに移動すると、Identifier プロパティの新しい値がテーブル デザイナーで列に割り当てられます。Table Designer で変更を保存すると、これらの値がデータベースで有効になります。

テーブル作成時に自動番号付けされたフィールドを指定する

CREATE TABLE [dbo]. [UserInfor](
 [UserID] [int] IDENTITY(100,2) NOT NULL,
 [UserName] [nchar](10) NOT NULL,
) 

説明 ユーザー情報テーブルUserInforを作成し、自動番号フィールドとしてUserIDを指定します。
ここで IDENTITY(100,2) は、フィールドの初期値を100とし、データ入力後1回目は100、2回目は102のように、それぞれ2ずつ増加することを意味します。

2. 自動採番されたフィールドの値を取得する

ここでは、@@IDENTITY を使用して、自動インクリメントフィールドの主キーの値を取得します。

(3) 自動採番フィールドの種の開始値のリセット

自動インクリメントフィールドを持つテーブルの内容をユーザーが消去した場合、そのフィールドによる開始値は元の値から増加しますが、DBCCコマンドで開始値をリセットすることができます。
DBCC CHECKIDENT (UserInfor,RESEED,0)
UserInforテーブルのオートインクリメントフィールドのシード開始値を0に設定。 データ挿入後のオートフィールドの値は0+インクリメント、インクリメントが1なら値は1

----------------------------------------------
テーブルを右クリック - > テーブルのデザイン - > idフィールド(クラスint型)を探す - > 特定 - > はい - > 種(初期値)を特定 - > 増分量を特定 - > OK
---------------------------------

create table mytest 
( 
id int primary key identity(1,1),--primary key, auto+1 
name varchar(20) unique not null,--Duplicate not allowed, not allowed to be null 
Age tinyint, 
notetime smalldatetime default getdate() 
) 

insert into mytest values ('Zhang San',20,getdate()) 
insert into mytest (name,age)values ('Li Si',20)