web-dev-qa-db-ja.com

SQL-ID列を自動インクリメントせずに行を挿入する方法

強制自動インクリメント列があるテーブルがありますが、この列はアプリ全体で保持される非常に貴重なIDです。これを自動インクリメントカラムにするのは、私の側の開発が不十分だったと言ってすみません。

だから、ここに問題があります。このテーブルに、すでに作成されてテーブルから削除された列のIDを挿入する必要があります。このIDを復活させてテーブルに戻すようなものです。

したがって、列の増分をオフにせずに、プログラムでこれを行うにはどうすればよいですか。私が間違っている場合は修正してください。プログラムでオフにすると、0または1で再起動し、それが発生しないようにします...

28

Microsoft SQL Serverを使用している場合は、次のようにステートメントSet Identity_Insert [TableName] Onを発行して、autoIncrementing機能を「オフ」にすることができます。

  Set Identity_Insert [TableName] On
  -- --------------------------------------------
  Insert TableName (pkCol, [OtherColumns])
  Values(pkValue, [OtherValues])
  -- ---- Don't forget to turn it back off ------
  Set Identity_Insert [TableName] Off
71
Charles Bretana

Charlesの回答(現在は100%正しい:-)に加えて、テーブルのIDENTITYの現在の値を保持します)に加えて、テーブルのIDENTITYの現在の値を確認することもできます-これを行うことができますこのコマンドでここに:

DBCC CHECKIDENT('YourTableName')

実際にchangeにする必要がある場合は、ここでこのコマンドを使用して行うことができます。

DBCC CHECKIDENT ('YourTableName', RESEED, (new value for IDENTITY) )
8
marc_s

実際、上記のINDENTITY_INSERTのコードは正しいです。ONにすると、値を自分で挿入することをサーバーに伝えます。 IDENTITY列に値を挿入できます。完了したら、オフに戻します(サーバーが値を生成して挿入できるようにします)。

5