2016-04-15 10 views
2

テーブルからレコードの一部を削除し、それらをバックアップテーブルから挿入し直したいとします。主キー列はID列で、削除された列よりも大きな値を持っています。私は列を再植え付けることができません。 SQLサーバーで可能であれば教えてください。SQLサーバーのID列に最大値未満を挿入します。

+0

間違いなく可能です。あなたのSQLの一部と、あなたが得ているエラーを投稿してください。 –

+0

私はあなたが既存の最大値よりも小さい値に再シードすることはできないと思っています。 IDENTITY_INSERTは、igorの回答のように使用してください。 – Paparazzi

答えて

2

これを行う前に、このテーブルに挿入する他のプロセスがないこと、またはIDENTITYが無効になっているときにエラーを受け取る可能性があることを確認してください。または、transaction with the isolation levelに設定した内容をSERIALIZABLEに変更して、他のプロセスからの同時変更を防ぐこともできます。

  1. テーブル/列のIDENTITYを無効にします。
  2. バックアップからINSERT文を実行する場合は、IDENTITY列の値を指定してください。
  3. テーブル/列のIDENTITYを再度有効にします。

SQL:

SET IDENTITY_INSERT <your_table> OFF 
-- Exceute Inserts 
SET IDENTITY_INSERT <your_table> ON 

ノート

あなたはおそらく、トランザクションに包まれたあなたの挿入を実行する必要があります。そうすれば、失敗があればすべてをロールバックできます。アイデンティティが常に増分されるので、削除されたレコードを再度追加しても問題は発生しないので、競合は発生しません。あなたが完了したら、あなたはPK上のあなたのインデックスの断片化をチェックしたいかもしれません。

関連する問題