web-dev-qa-db-ja.com

データベース行の主キー値の変更

SQL Server Management Studioを使用していて、テーブル行の自動インクリメントの主キー値を別の値に変更したい。テーブルを編集用に開いた後のSQL Server Management Studioでは、もちろん、このフィールドがすべての行で灰色になっています。

出来ますか?誤って削除した行の番号を使用したいので、それは有効であり(他の主キー値との競合はありません)、そして何よりも重要なことですが、DBに追加された次の行には、そのまま自動インクリメントされた値が必要です。

ありがとう。

編集:このPKの他のテーブルレコードとのリンクを失うことは、この行の問題ではありません。手動で復元できます。

15
abenci

必ずしも推奨されるわけではありませんが、番号を変更する行のコピーを挿入しますが、必要なIDを使用します。

SET IDENTITY_INSERT aTable ON
GO

-- Attempt to insert an explicit ID value of 3
INSERT INTO aTable (id, product) VALUES(3, 'blah')       
GO

SET IDENTITY_INSERT aTable OFF
GO

次に、(FK参照を更新した後で)不要な番号の行を削除します。

詳細はこちら: http://technet.Microsoft.com/en-us/library/aa259221(v = sql.80).aspx


後世のために、下のコメントの質問を明確にするために、現在の最大値より大きい値を挿入した場合にのみ自動インクリメント値が影響を受けます。

リンクされた記事からの引用:

挿入された値がテーブルの現在のID値よりも大きい場合、SQL Serverは自動的に新しく挿入された値を現在のID値として使用します。

20
Paddy