2016-04-27 4 views
0

私は100000レコードのテーブルを持っています。ここでは、ID列である列が1つあります。今、これらのレコードをすべてIdentity列のみに更新する必要があります。テーブル内の値再シードと既存のレコードを削除せずに既存の値のID列をリセットする

DBCC CHECKIDENT ('[Patient]', RESEED, 3000); 
+3

なぜあなたはそれをしたいですか? ID列の値は決してビジネス値ではありません。 – Raj

+0

次のリンクを確認できます。あなたに役立つかもしれません。 http://stackoverflow.com/questions/19155775/how-to-update-identity-column-in-sql-server – Nagahornbill

+0

プロダクションサーバーでこの問題に直面しており、これを修正したいと考えています。何か解決策はありますか? – Parveen

答えて

0

のDBCC CHECKIDENTは、実際のアイデンティティカウンタを変更します、ではない:私はすべての既存のID再シードを更新し、3000

から開始したい私はこのクエリを見つけたが、それは唯一の新しいレコードのために働きます。値を変更するには、「set identity_insert」を使用する必要があります

0

もう1つの解決策があります。 Patientテーブルと同じ定義の新しいテーブルを作成します(PatientNewと呼ぶことができます)。あなたの必要な値の最初にそのテーブルを再3000 - 1。今、患者テーブルを新しいテーブルにコピーすると、それはあなたの要件に応じてアイデンティティを持っています。古いテーブルを削除し、新しいテーブルの名前を変更します。

delete from PatientNew 
    dbcc checkident('PatientNew', reseed, 2999) 
    insert PatientNew(Col2, Col3) select Col2, Col3 from Patient 

他のすべての列が含まれています。テーブルのドロップとおそらく一時的な低下に外部キー制約

ALTER TABLE Patient NOCHECK CONSTRAINT ALL 

あなたを必要とアクションの名前を変更し、名前を変更した後、再びそれを有効にするには:

ALTER TABLE Patient WITH CHECK CHECK CONSTRAINT ALL 
1

私は私の自己解決策を見つけた

ステップ1 )SQLツールメニュー 手順2)オプションメニュー を選択3)新しいポップアップウィンドウが開き、デザイナー の手順をクリックする4)チェックボックスをオフにする - テーブルの再作成が必要な変更を保存しないeation ステップ5)右のデザインモードで開いてテーブル ステップ6) ステップ7)を削除ID列 ステップ8をクリックして)再びクエリを下回る

alter table tableName 
add columnName BIGINT identity(5000,1) 

それはちょうど

に動作しますとアイデンティティで削除列を追加
関連する問題