SQL Serverにおけるidentity(自己増加)の使い方の詳細


一、identityの基本的な使い方
1.意味
identityはこのフィールドの値が自動的に更新されると表しています。私達が守る必要はありません。通常、identityに直接修飾された文字の割当値を与えてはいけません。
2.文法
列名データタイプ制約identity(m,n)
mは初期値、nは自動的に増加する値を表します。
mとnの値が指定されていない場合は、デフォルトは(1,1)です。
mとnの値を同時に指定するか、mとnが指定されていないか、どちらの値を書くかだけではいけません。エラーが発生します。
3.例示的なプレゼンテーション
mとnの値を指定しない

create table student1
(
 sid int primary key identity,
 sname nchar(8) not null,
 ssex nchar(1)
)
insert into student1(sname,ssex) values ('  ',' ');
insert into student1 values ('  ',' ');--      
insert into student1 values ('  ',' ');

mとnの値を指定します

create table student2
(
 sid int primary key identity(20,5),
 sname nchar(8) not null,
 ssex nchar(1)
)
insert into student2(sname,ssex) values ('  ',' ');
insert into student2 values ('  ',' ');--      
insert into student2 values ('  ',' ');

4.レコードを削除して挿入する
sidを2のレコードに削除し、挿入し続けます。新たに挿入されたレコードのsidは2ではなく、3です。

create table student3
(
 sid int primary key identity,
 sname nchar(8) not null,
 ssex nchar(1)
)
insert into student3(sname,ssex) values ('  ',' ');
insert into student3 values ('  ',' ');
delete from student3 where sid=2;-- sid 2     
insert into student3 values ('  ',' ');

二、identityの値を再設定する
1.文法
dbcc checkdent(表名、reeed、n)
n+1はテーブル中のidentityフィールドの初期値(nの値は0とすることができる)を表しています。
つまり、挿入されたのがIDが2の記録なら、nの値は1です。
2.例示的なプレゼンテーション

create table student4
(
 sid int primary key identity,
 sname nchar(8) not null,
 ssex nchar(1)
)
insert into student4(sname,ssex) values ('  ',' ');
insert into student4 values ('  ',' ');
delete from student4 where sid=2;-- sid 2     
dbcc checkident('student4',reseed,1);-- student4  identity           1
insert into student4 values ('  ',' ');

三、identityフィールドにデータを挿入する
1.文法
set identity_insert表名on
insert intoテーブル名(列名1、列名2、列名3、列名4)values(データ1、データ2、データ3、データ4)
set identity_insert表名off
注意:データを挿入する際には、identityで修飾されたフィールドの名前を指定しなければなりません。
2.例示的なプレゼンテーション

create table student5
(
 sid int primary key identity(20,5),
 sname nchar(8) not null,
 ssex nchar(1)
)
insert into student5(sname,ssex) values ('  ',' ');
insert into student5 values ('  ',' ');
insert into student5 values ('  ',' ');
set identity_insert student5 on;
/*
insert into student5 values ('  ',' ');--error
insert into student5 values (21,'  ',' ');--error
*/
insert into student5(sid,sname,ssex) values (21,'  ',' ');
set identity_insert student5 off;
/*
insert into student5 values (22,'  ',' ');--error
insert into student5(sid,sname,ssex) values (22,'  ',' ');--error
*/
insert into student5 values ('  ',' ');

追加知識:SQL Server追加とメインキー制約の削除
PRIMARY KEYは、データベーステーブル内の各レコードを一意に識別することを約束する。メインキーは一意の値を含む必要があります。メインキー列にはNULL値が含まれません。各テーブルにはメインキーがあります。各テーブルにはメインキーが一つしかありません。
メインキー制約動作には、制約の追加と削除が含まれています。制約の変更は、実は制約の追加または削除です。
メインキー制約を追加するのは簡単ですが、制約名のないメインキー制約を削除するのは複雑です。SQL Serverをよく知らないと、この機能を実現するのは難しいです。
メインキー制約操作基本文
新しいテーブルを作成する時に、メインキー制約を追加するのが簡単で、直接列名の後にprimary keyを追加すればいいです。標準的にメインキー制約を追加するSQLスクリプトは以下の通りです。

create table    (     1 int not null, ...,
  [constraint    ] primary key (   1, …)
)
ここで、制約名は任意です。この方法は任意に複数または1つのプライマリキー制約を追加することができる。
既存のテーブルにメインキー制約を追加します。上記のスクリプトと似ています。
alter tableテーブル名[add constration制約名]prmarykey(フィールド名1,…)
ここで、制約名は上と同じで、オプションで指定してください。
SQL Serverは、メインキー制約を削除してMySQLとは違って、メインキーの制約名を削除することができます。SQL Server標準の削除メインキーのスクリプトは以下の通りです。
ALTER TABLE表名DROP CONSTRAINT制約名
もちろん、このステートメントは既知の制約名のプライマリキー制約のみを削除することができます。
不明なプライマリキーの制約名の制約を削除します。
前のステートメントによると、この制約名は以前に指定されていたら大丈夫です。そうでなければ、今回は削除できません。表の主キー制約名はどのように取得できますか?SELECT*FROM SYSS.OBJECTS文を実行して、検索結果を見てみます。データベース内のすべての制約は中にあります。name項目はPKの主要なものがメインキーで制約されています。type_を見てください。descはPRIMARY_ではないですか?KEYCONSTRAINTまたはtypeはPKですか?もちろん指定された名前はPKプレフィックスを使用していません。)
表の名前が知られている上に、メインキーが格納場所を制約することも知っています。鍵は二つのものがどのように関連していますか?表の名前を使うとメインキーの制約名が調べられます。この中でコミュニケーションの橋はparent_です。objectid
ここで提供しているのはobjectだけです。id、じゃどうやって表のobjectを見つけますか?idは?先ほどの検索結果を見てみますと、元のデータベースの中の関連情報は全部中にあります。表、関数などは全部中にあります。id
次に上記の考えを統合して、テーブル名のクエリーテーブルIDに基づいて、メインキー制約名をテーブルIDに基づいて見つけて、カスケード方式で照会すれば、検索できます。次のようなクエリ文を作成できます。

SELECT NAME from SYS.OBJECTS WHERE TYPE_DESC ='PRIMARY_KEY_CONSTRAINT' AND
PARENT_OBJECT_ID = (SELECT OBJECT_ID
FROM SYS.OBJECTS WITH(NOLOCK) WHERE NAME = '  ')
そしてNAMEは私たちに必要な制約の名前です。次に、上記の削除制約を構成するSQL文を実行すればいいです。典型的なSQLは以下の通りです。
ALTER TABLE表名DROP CONSTRAINT NAME(制約名)
他の制約はこの方法で削除できます。
以上のSQL Serverのidentityの使い方の詳細は、小編集が皆さんに共有している内容の全てです。参考にしていただければと思います。よろしくお願いします。