• ベストアンサー

IDENTITY列の番号リセット

SQLServerで、Identity属性を使用して自動的に番号をセットしている項目があります。 この採番を1からやり直したいのですが、TRUNCATE TABLEコマンドを使用してレコードを空にしても、カウンタがリセットされません。 何かいい方法はありますか?

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

  • ベストアンサー
  • teccin
  • ベストアンサー率100% (2/2)
回答No.1

DBCC CHECKIDENT (tablename ,RESEED ,0) にて変更可能です。 0の部分を戻したい値に変更する事も可能です。

Laphroaig
質問者

お礼

ありがとうございます! 助かりました。

全文を見る
すると、全ての回答が全文表示されます。

関連するQ&A

  • 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よりテーブルの中身を見ています。 どうかよろしくお願いいたします。

  • SQLServerでOracleシーケンスのような機構を実現するには

    いつもお世話になります。 SQLServerで自動採番される仕組みで何かいい方法がないかどうか悩んでいます。 主キーとなる項目に自動採番された値を、アプリケーションでセットした上で、DBに追加する仕組みを考えています。 OracleではSequenceのnextvalなどを使用すれば、番号を自動採番したものを取得することが可能ですが、 SQLServerでこのような仕組みを実現するために何か良い方法はありませんでしょうか? (追加先のDBはSQLServerではなく、自動採番等の機能も無いため、追加する前にアプリケーションでセットする必要がある。) 今までOracleしか使用したことが無く、SQLServerは初めてなので、ご教授頂きたく投稿しました。 よろしくお願いします。 SQLServerは2005を使用しています。

  • IDENTITY 項目の空いている値を自動で登録する方法

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

  • ストアドプロシージャに複数のSQL文を書く

    いつもお世話になります。 OS:Windows XP SQL Server2005 ExpressEditionです。 テーブル名:testTable 列 :(1)number(intで主キーで自動採番)(2)name(nvarchar(50)) ストアドプロシージャを以下のSQL文で作成しました。 insert into testTable (name) values(''); update testTable set name = ltrim(str(SCOPE_IDENTITY())) + '_table' where number=SCOPE_IDENTITY(); (説明) インサート文;(セミコロンを打っています) アップデート文;(セミコロンを打っています) なぜこんなことをするかと言いますと、 自動採番で取得した番号を列:nameの内容の一部にしたいためです。 つまり、列:numberが12で採番されたとすると列:nameは 12_table と したいためです。 ltrimをかけていますのは、str(SCOPE_IDENTITY())の結果、数値の左 に空白が入ってしまうためです。(intのバイト数ほどでしょうか) 想定どおりの値がnameに入っております。 しかしこれは邪道ではないかと危惧しております。 よろしくご教授をお願いいたします。

  • セッションのリセット

    JSPで<input type=reset value="リセット">というふうにすると入力していた項目を空の状態にできますが、 セッションを使用して別のページから戻ってきた場合のリセットを押した場合の動作について教えてください。 具体的には、入力画面で名前や年齢等を入力し確認画面に送信します。確認画面でsetAttributeでセッションに登録します。そして確認画面から戻るボタンを押して、入力画面ヘ戻り入力画面のリセットを押しても項目が空にならないんです。        入力画面.jsp→確認画面.jsp 空にすることは可能でしょうか。      

  • identityの値の変更/自動更新について

    MySQLからWindowAzureに移行しています。 1.identityが設定されている値の変更 auto_incrementが使えないようなので、identityを使用して下記のテーブルを作成しました。 ですが、identityだと更新ができないので困っています。 CREATE TABLE test ( id int NOT NULL identity, text nvarchar(255) NOT NULL, PRIMARY KEY (id), ); データの追加に関しては、IDENTITY_INSERTをONにすることでできますが、更新時はどうすればよいでしょうか? データの追加の場合は、使用の際上記のように、毎回ONにする必要がありますか?(DB接続時にONにしてしまえばよい/テーブル作成時に記述で可能ではない?) 複数個所から更新をするので、すべての箇所に記述するのは可能な限りしたくありません。 2.データの自動更新 テーブルを更新した際に、データを自動で更新したいのですが、mysqlでは on update で可能ですが、 SQLAzureでは、下記のSQLをどのように記述すればよいでしょうか? create table time( id int not null, time1 datetime NOT NULL default CURRENT_TIMESTAMP on update CURRENT_TIMESTAMP, PRIMARY KEY(id) ); よろしくお願いします。

  • 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'から順に再配番されればいい。 やりたい事は単純なのですが。。。。初心者ですみません。 助言いただければと思い質問しました。

  • ファイルメーカーで最大シリアル番号+1を自動入力

    ファイルメーカーver7を使用しています。 自動シリアル番号の機能を利用してシリアル番号を振っているのですが、 新規レコードを作成して、その直後にレコード削除してと繰り返していると、 空のシリアル番号がどんどん作られてしまいます。 そこで、最大シリアル番号に1を足したものを 自動入力させたいのですが、どうしたらいいかわかりません。 どなたかアドバイスよろしくお願いします。

  • エラー番号=5 制約を有効にできませんでした。・・・

    ”エラー番号=5 制約を有効にできませんでした。行に入力できるのは、null以外の値、あるいは外部キーですが、この制約違反が1つ以上で発生しています”のメッセージが表示されます。 この解決法を教えてください。 VB.net SQLServer2005 Windows2003SERVERsp2 といった環境です。 データアダプタを用いて、データセットに格納した取得をしています。 SELECT文では、2つのテーブルをunionしてある項目のMAX値を求めようとしています。 select条件ありでレコードがあった場合には、上記のメッセージは表示されないのですが、該当レコードがないと表示されます。(テーブルは0件ではなく該当のレコードがないということです) このselect文をクエリで実行すると正常に終了します。ただ、該当レコードがないので"null”になっていますが。 どこかで”null”だっったとしても取得できるように設定する必要があると聞いたのですが、(ひととおり設定見直したつもり)うまくいきません。 該当レコードなしでも正常として次の処理をしたいのですが、 解決法を教えてください。

  • Null値を無視してユニークにしたい

    下記のようなテーブルがあります。 ID  aaa  bbb 10  A01 11 12      B01 13  A02 14  A03  B02 ・IDは,主キー(レコードの登録時に,IDENTITYで自動的に取得) ・aaa,bbbは,任意のタイミングで入力や編集があるが,ユニーク性を保ちたい ・aaa,bbbの入力に関しては,下記のようなテーブルを作って自動採番にしたい Category  Last_No   A     03   B     02 (1)データベース側にて,aaa,bbbにユニークインデックスを設定すると, Null値に関しても重複違反になってしまったのですが, これは,そういうものなのでしょうか? (2)ユニークインデックスが設定できない場合に, Null値以外の値が,ユニークである事を保つためには, どうすれば良いのでしょうか? 自動採番だけでなく,編集も有り得るため,悩んでいます。 (編集は,A01-1のように,枝番を付ける場合が多いです) 以上,どなたかご教示願います。

このQ&Aのポイント
  • 地元が農家の人は、毎年田植えの時期になると地元に手伝いで帰ると思います。
  • しかし、自分の嫁が妊娠していたら、その時は嫁と一緒に地元に帰るかどうか迷うかもしれません。
  • 家に妻を置いて一人だけ帰るか、妻と一緒に帰るかは、個人の意識や事情によると思います。
回答を見る