SQL Serverデータベーステーブルのプライマリ・キーのリセット


一般的に、テーブル構造を設計する際、メンテナンスを容易にするために、プライマリ・キーをプライマリ・キー自己増加(SQLServerデータベースでは簡単に設定できますが、Oracleではシーケンス、トリガによって実現されます)に設定し、開発中にデータの一部をテストすることがよくあります.プライマリ・キーの自己増加により、テーブル内のデータをクリアする際のプライマリ・キー・シーケンスは1からではなく、使用には影響しませんが、何となく不快な感じがします.この場合、DBCC CHECKIDENTを使用して、使用中のテーブルの識別列の開始値を再設定できます.使用方法について簡単に説明します.
テーブル内のすべてのレコードを削除する場合は、識別列を1から開始するときにクエリー・アナライザで実行できるようにする必要があります:DBCC CHECKIDENT(Table Name,RESEED,0);
指定したテーブルの現在のID値を確認し、必要に応じてID値を修正します.
構文
DBCC CHECKIDENT     ( 'table_name'         [ , { NORESEED                 | { RESEED [ , new_reseed_value ] }             }         ]     )
パラメータ
'table_name'
は、現在のID値をチェックするテーブル名です.テーブル名は識別子ルールに一致する必要があります.詳細については、「識別子の使用」を参照してください.指定したテーブルには、識別カラムが含まれている必要があります.
NORESEED
現在のID値を修正しないことを指定します.
RESEED
現在のID値を修正する必要があることを指定します.
new_reseed_value
は、識別カラムに値を再割り当てするときに使用する値です.
コメント
必要に応じて、DBCC CHECKIDENTはカラムの現在の識別値を修正します.ただし、識別列がNOT FOR REPLICATION句(CREATE TABLEまたはALTER TABLE文)を使用して作成された場合、現在の識別値は修正されません.
識別列にプライマリ・キーまたはユニーク・キー制約がある場合、無効な識別情報は、エラー情報2627を引き起こす可能性がある.
現在の識別値の詳細は、パラメータ仕様により決定されます.
DBCC CHECKIDENT文
IDの修正
DBCC CHECKIDENT ('table_name', NORESEED)
現在のID値はリセットされません.DBCCC CHECKIDENTは、現在の識別値と識別値を示すレポートを返します.
DBCC CHECKIDENT('table_name')またはDBCC CHECKIDENT('table_name',RESEED)
テーブルの現在の識別値がカラムに格納されている最大識別値より小さい場合は、識別カラムの最大値を使用してリセットします.
DBCC CHECKIDENT ('table_name', RESEED, new_reseed_value)
現在の値をnew_に設定reseed_value.テーブルの作成後にローが挿入されていない場合、DBCC CHECKIDENTの実行後に挿入された最初のローはnew_を使用します.reseed_valueを標識として使用します.そうでなければ、次の挿入行はnew_を使用します.reseed_value + 1.new_reseed_valueの値は識別列の最大値より小さく、後でテーブルを参照すると2627番のエラー情報が生成されます.
現在のID値は、テーブルの最大値より大きくすることができます.この場合、DBCC CHECKIDENTは現在の識別値を自動的にリセットしません.現在の識別値が列の最大値より大きい場合に、現在の識別値をリセットするには、2つの方法のいずれかを使用します.
  • DBCC CHECKIDENT('table_name',NORESEED)を実行してカラムの現在の最大値を決定し、DBCC CHECKIDENT('table_name',RESEED,new_reseed_value)文を使用してnew_として指定します.reseed_value.
  • new_reseed_valueを小さい値に設定してDBCC CHECKIDENT('table_name',RESEED,new_reseed_value)を実行し、DBCC CHECKIDENT('table_name',RESEED)を実行します.

  • 結果セット
    DBCC CHECKIDENTは、識別カラムを含むテーブルに対してオプションを指定するかどうかにかかわらず、次の結果セットを返します(値が変更される場合があります).
    Checking identity information: current identity value '14', current column value '14'.
    DBCC execution completed. If DBCC printed error messages, contact your system administrator.
    

    アクセス権
    DBCC CHECKIDENT権限は、テーブル所有者、sysadmin固定サーバロール、db_にデフォルトで付与されます.ownerは、データベース・ロールのメンバーを固定し、譲渡できません.

    A.必要に応じて現在の識別値をリセットする
    次の例では、jobsテーブルの現在の識別値を必要に応じてリセットします.
    USE pubs
    GO
    DBCC CHECKIDENT (jobs)
    GO
    

    B.現在の識別値を報告する
    次の例ではjobsテーブルの現在の識別値を報告します.識別値が正しくない場合は、修正されません.
    USE pubs
    GO
    DBCC CHECKIDENT (jobs, NORESEED)
    GO
    

    C.現在の識別値を30とする
    次の例では、jobsテーブルの現在の識別値を30に強制します.
    USE pubs
    GO
    DBCC CHECKIDENT (jobs, RESEED, 30)
    GO

    原著:http://blog.csdn.net/jxqvip/article/details/6611040