2012-03-12 17 views
-1

、IDフィールドを使用していくつかの列が削除されました。 私は、元の値でID列が削除された行を挿入したいが、その方法はわかりません。SQL Server 2010のSQL ServerでID列が削除されました

私はあなたがアイデンティティを再シードする必要が編集を試みたが、ID列が

UPDATE table 
+2

SQL Serverのバージョンはありません** 2010 ** **何を使用していますか?また、**なぜ**使用されたアイデンティティ値を再サイクリングするのを邪魔するのですか?あなたはそれから何を得るのですか?利益のために多くの仕事のように思える、本当に.... –

+2

ID値を再利用することは非常に悪い考えです。たとえば、クエリをロールバックしても値をスキップしないようにアイデンティティに頼ることはできません。そのため、再利用を試みる理由はまったくありません。あなたが定義されたPK/FK構造を持たない関連テーブルを持っているならば、それらの古いレコードに対して新しいデータを置くことは、それらの古いレコードが親レコードとともに削除されないので間違ったレコードに関連します。 – HLGEM

答えて

2
SET IDENTITY_INSERT [YourTableName] ON 
--do your update/insert query here 
SET IDENTITY_INSERT [YourTableName] OFF 
+1

「SQL Server 2010」と言うのは間違いだと思います。これは彼の要求に対する解決策であり、 'SQL SERVER 2000'以降のバージョンで動作します。 [SET IDENTITY_INSERT - MSDN](http://msdn.microsoft.com/en-us/library/aa259221(v=sql.80).aspx) – Kaf

+1

私は、あなたから離れた+1を返しますなぜなら、あなたはアイデンティティ値を再利用する方法に関する質問に答えたからです。しかし、上記のような危険性については、無視するべきではありません。 –

+0

@AaronBertrand - 感謝と治療! – Kaf

-2

をグレーアウトされた:あなたはあなたの中にギャップがあるかどうかを気にする理由

dbcc checkident (mytable, reseed, 30) 
+2

しかし、**潜在的**は重複を引き起こします。あなたのサンプルで30ここに存在する!この操作で** **非常に注意してください! IDENTITYを特定の値に再入力すると、再シードされた値よりも高い既存の値はスキップされません - よくある誤解です! –

+1

そうです、そして、なぜですか? IDENTITYプロパティは独自に一意性を強制しないためです。私は、IDENTITYカラムに関するいくつかの同様の誤解についてブログに書きました:http://sqlblog.com/blogs/aaron_bertrand/archive/2012/02/27/bad-habits-to-kick-believing-everything-you-hear-or-read .aspx –

1

あなたは説明できますID列?ラベルの隣にあるかなりのID番号が必要な場合(そして、他のテーブルの関連データが心配でない場合、またはID番号1が削除されても2番目の行がID 2を保持するかどうか)、これらの意味のないID番号実行時に、例えば

SELECT col, MeaninglessID = ROW_NUMBER() OVER (ORDER BY col) 
FROM dbo.table 
ORDER BY col; 
+1

私はこれが私の1000回目の答えであることを認識しました。 –

+0

WOOOHOOOO !!! ;-)おめでとう - 何千ものもっと楽しみにして:-) –

+0

ありがとうMarc、私はあなたをキャッチするかなりの方法があります。 :-) –

関連する問題