2009-06-26 17 views
24

私は強制的な自動インクリメント列を持つテーブルを持っており、この列はアプリケーション全体を通して保持される非常に貴重なIDです。申し訳ありませんが、これを自動的にインクリメントする列にすることは、私の面では貧弱な開発でした。SQL - ID列を自動インクリメントせずに行を挿入する方法?

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

これをプログラマチックに行うには、列の増分をオフにする必要があります。もし私が間違っていれば、私はそれをプログラム的にオフにすると、それは0または1で再開し、それが起こらないようにします...

+0

どのRDBMSを使用していますか? – Quassnoi

+0

この質問のMS-SQLサーバー... –

答えて

58

Microsoft SQL Serverにいる場合、 」のように、文のSet Identity_Insert [TableName] Onを発行して自動インクリメント機能:

(今は100%正しい:-)で、テーブルの上にIDENTITYの現在の値を保持している)チャールズの答えに加えて
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 
+0

ありがとう、@jvanderh、私は明確に編集しました –

+0

marc_sは正しいです...あなたはそれを持っています – jvanderh

+0

増分されたIDの最後の番号は保持されますか?私はそれが自分自身のアイデンティティ列全体をリセットしたくない... –

7

、テーブルのIDENTITYの現在の値を確認したい場合もあります。ここでは、このコマンドでこれを行うことができます:

DBCC CHECKIDENT('YourTableName') 

あなたがこれまでに実際に変更それを必要とする場合は、ここで、このコマンドを使用して、そうすることができます。

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

実は、INDENTITY_INSERTため、上記のコードが正しいか - それをONにあなたがしたいサーバーを伝えます自分で値を挿入してください。 IDENTITYカラムに値を挿入することができます。完了したら、それを元に戻して(サーバーが値を生成して挿入できるようにする)必要があります。

関連する問題