• ベストアンサー

SQLserver テーブルのIDENTITY列

教えてください。 MSSQLサーバーのテーブルで最新でInsertした直後に、そのレコードを削除して、 再度Insertした時のIDENTITY列の値はその前にInsertした時に使用された値が 再度使われるのでしょうか? それとも、一度使われた値は次回以降使わないのでしょうか? SQLサーバの管理画面にどちらかを選択できる設定があるのでしょうか? よろしくお願いします。

質問者が選んだベストアンサー

  • ベストアンサー
  • innoya
  • ベストアンサー率71% (10/14)
回答No.1

こんにちは。 MSSQLサーバーのテーブルで最新でInsertした直後に、そのレコードを削除して、 再度Insertした時のIDENTITY列の値はその前にInsertした時に使用された値が 再度使われることはありません。 手動で設定し直す限り。 #### Identityを設定する方法 テーブルを「デザイン」で開いてIdentityで設定するカラムを選択すると 【例のプロパティ】に「Identityの設定」があります。 スクリーンショットのように画面が見えない場合は、 「IDENTITYの設定」前にある「+」マークをクリックすると スクリーンショットのように表示されると思います。 そこで「(idである)」項目を「いいえ」から「はい」に変更すると設定は終わります。

関連するQ&A

  • SQLServerのID列(自動連番)について

    PHPとSQL Serverでウェブアプリケーションを作っています。 例として、下記のようなテーブルを想定します。 テーブル名 users  user_id [int] ←主キー(IDENTITYプロパティを指定して、1ずつ増える連番)  name [char(10)] IDENTITYにより、INSERT INTO でuser_idの値を指定せずとも、一意のID値が割り振られます。 このINSERT処理は、PHPのmssql_queryでSQL文を発行しているのですが、 この時割り振られたuser_idが何であるかは、どうやって調べればよいのでしょうか。 IDENTITYを利用せず、INSERTする前にSELECT MAX(user_id)を発行して、 最も大きなuser_idを調べ、それを+1してINSERT、とすれば当然user_idは分かりますが、 せっかくIDENTITYの機能があるのに明らかに無駄な処理です。 どなたか分かる方、よろしくお願いします。

    • ベストアンサー
    • PHP
  • Identity列に-1が入ってしまう

    いつも参考にさせていただいています。 今回質問させていただいたのは、Identity属性の列に「-1」が入ってしまう現象についてです。 なぜこのようなことになるのか、何かお気づきのかたいらしたらご意見いただけないでしょうか。 [現象の流れ] ※SAMPLEという名前のテーブルを例に使います※ SAMPLEテーブルにレコードを10程度追加しました。 追加はMS SQL Server Management StudioのクエリエディタウィンドウからINSERT文を発行して行いました。 追加後、テーブルの中身が下記のようになっていました。 Sampleテーブル A列 B列 1  1つ目の要素 2  2つ目の要素 -1  3つ目の要素 -1  4つ目の要素 -1  5つ目の要素  ・  ・  ・ ※A列に-1が入っている状態です。 [テーブル構成] CREATE TABLE [dbo].[SAMPLE]( [A] [int] IDENTITY(1,1) NOT NULL, [B] [nvarchar](20) NOT NULL ) [疑問点] なぜIdentity属性の列に-1が入るようなことが起こったのでしょうか? 原因が全く分かりません。 今後このようなことが起こっては怖いので、 原因や退避策があれば何かご意見いただけないでしょうか。 ちなみに1度データを削除し、 DBCC CHECKIDENT(テーブル名,RESEED, 0) で番号をリセットしてデータを入れ直した後の再現はまだありません。 [環境] Windows XP MS SQL Server2008 Standard MS SQL Server Management Studioよりテーブルの中身を見ています。 どうかよろしくお願いいたします。

  • IDENTITY列を持つテーブルへBCPでインポート

    こんにちは。 -- IDENTITYを解除 SET IDENTITY_INSERT TBLA ON --BCPコマンドを文字列として生成する set @cmdstr = '' set @cmdstr = 'bcp TBLA in c:\TBLA.csv -c -t , -r \n -U xx -P xx' --生成したコマンド文字列を実行するxp_cmdshellを動的SQLで実行する execute master.dbo.xp_cmdshell @cmdstr -- IDENTITYを再設定 SET IDENTITY_INSERT TBLA OFF ってな感じでやってみたのですが、 実行後TBLAの中を見てみると、IDENTITY列の値は テキストデータの中の値ではなく、 テーブルがIDENTITYを勝手に割り振っちゃいます。 どなたか、このようなことやった方いらっしゃいませんか?

  • IDENTITY列の複数テーブルへのINSERT

    テーブルAへINSERTをした場合のIDENTITY列の値を 同じトランザクション内で テーブルBの別のフィールドへINSERTしたいのですが、 どのようにSQLを書けばよいのか、困っています。 どうか、ご教示お願い致します。 INSERT INTOTABLE_A (NAME_A) VALUES ('あいうえお') ↓ INSERT INTOTABLE_A (A_ID,NAME_B) VALUES (取得したA_ID, 'さしす') INSERT INTOTABLE_A (NAME_A) VALUES ('かきくけこ') ↓ INSERT INTOTABLE_A (A_ID,NAME_B) VALUES (取得したA_ID, 'たちつ') INSERT INTOTABLE_A (NAME_A) VALUES ('さしすせそ') ↓ INSERT INTOTABLE_A (A_ID,NAME_B) VALUES (取得したA_ID, 'なにぬ') TABLE_A ID NAME_A 5  'あいうえお' 6  'かきくけこ' 7  'さしすせそ' TABLE_B ID A_ID NAME_B 1  5  'さしす' 2  6  'たちつ' 3  7  'なにぬ'

  • identity属性の列に自動採番(SQL)

    ID、name、seibetuという列を持つ、membersというテーブルがあり、INSERT文を実行してテーブルに値を入れたいと考えています。 IDがIs IDENTITYの値がTRUEになっている列で、NOT NULLです。 以下のクエリを実行したところ、IDにNULLが入るといったエラーが起きます。 SET IDENTITY_INSERT members ON INSERT INTO members (seibetu, name, ID) VALUES ('男', 'すずき', @@IDENTITY) 何か問題があるのでしょうか? お分かりの方いらっしゃいましたらよろしくお願いします。

  • ID列を含むテーブルコピー、編集

    ID列を含む「テーブルA」の内容をコピー&コピーの一部項目を編集して、ID列はリセットして振り直しを行った後、「テーブルA」にINSERTするといった事をしたいのです。編集する項目、IDの項目はKEYになっている。 SQLリファレンスで調べてみましたが、SET IDENTITY_INSERT XXXX ON、DBCC CHECKIDENTなどの使い方がいまいち良くわからないのです。 1.「テーブルA」のIDENTITYをはずした形で、コピー先のテーブル「テーブルB」をCREATE。(レイアウトは全く同じ。) 2.「テーブルA」を全て、「テーブルB」(編集用)へINSERT。 3.「テーブルB」の一部項目を編集、「テーブルA」のID列に相当する項目を'1'から配番する。 4.編集後の「テーブルB」を全て、ID列を含む「テーブルA」にINSERT。 上記3、4項の方法が良くわかりません。 データテーブルは、「年度」・「履歴番号」(ID)・「その他項目多数」を持ち、編集方法は、「年度」を新年度に置換し、「履歴番号」を'1'から振り直したものを、「テーブルA」にINSERTしたいのです。 「履歴番号」(ID)の振り直しの条件はありません。レコードTOPから'1'から順に再配番されればいい。 やりたい事は単純なのですが。。。。初心者ですみません。 助言いただければと思い質問しました。

  • SQLServer2000でテーブル名変更

    現在業務でMircrosoft SQL Server2000を使用しているのですが、テーブル名を変更するというオーダがありました。しかし、24時間365日業務制約をかけられないシステムなのでなるべく短い時間でテーブルのリネームを行いたいです。MSSQLの画面上で名前の変更はできるのですが、この作業を全てのテーブルに適用すると膨大な時間がかかってしまうため、1つのスクリプトにして実行しようと考えています。 オラクルの場合RENAME TO文でテーブル名の変更が可能であると思うのですが、MSSQLの場合どのようなSQL文を適用すれば良いのでしょうか。

  • IDENTITYを設定

    Microsoft SQL Server Management Studioを使っています。 テーブル追加時にIDENTITYの設定方法は 載っていたのですが、すでにあるカラムに対して はありませんでした。 すでにあるカラムにIDENTITYの設定方法を教えて下さい。

  • テーブルデーターの展開方法について

    MySQL5を利用しております 下記のような縦展開のテーブルから横型のテーブルへデーターを 展開したい場合 どの様なSQL文を使用したら良いかご教示願えな いでしょうか よろしくお願いいたします 1・縦型テーブル       |列1     |列2 -------------------- レコード1| カテゴリ1  |100 レコード2| カテゴリ2  |200 上記1のテーブル内、"100"と"200"の値を項目1に入っているカテゴリ 分類を利用し横型のテーブルへ1つのレコードとしてSQLで格納したいと 思っております 2・横型テーブル       |列3(カテゴリ1) | 列4(カテゴリ2) ---------------------------- レコード1| 100      | 200 自分で調べた限り insert文とupdate文を利用し1つ1つ 更新する方法以外思い浮かびません どなたかご教示の程 何とぞ 宜しくお願い致します

    • ベストアンサー
    • MySQL
  • IDENTITY 項目の空いている値を自動で登録する方法

    IDENTITY項目のあるテーブルのデータを削除した際、 次回別データinsert時に、今まで使用していた IDENTITY値を再び挿入することはできないでしょうか? Books Onlineを見るとID値のギャップ値を取得して SET IDENTITY_INSERT テーブル名 ON にして 手動でinsertすればいい、とありますが insertするだけで勝手に空いてる番号から採番してくれる方法は無いでしょうか? どなたかご存知の方いましたらよろしくご教授願います。 無理なことでしたら無理とお教えください。