4

Id 列に自動インクリメントがあるテーブルに行を「再挿入」できるかどうか疑問に思っています。「未処理」テーブルと「処理済み」テーブルがあり、「未処理」には自動インクリメントがあり、それらが処理されると「処理済み」テーブルに移動し、同じ ID を保持します。行が「未処理」に戻る可能性があるため、同じ ID でこの行を再度「再挿入」できるようにする必要があります。念のために言っておきますが、問題の定義から、ID 間で衝突が発生することは決してないことがわかっています。

また、これは SQL Server 2008 R2 で行われています。

ありがとう、トム

4

2 に答える 2

4

はい、これは可能です。INSERTステートメントでID列に目的の値を指定し、目的のテーブルに対して最初に「setidentity_insert」を有効にします(その後、安全のために無効にします)。

これはほとんどこれです(擬似コード):

INSERT #1 --created id 1
INSERT #2 --created 2
INSERT #3 -- created 3
DELETE 2 --2 gone, leaves a gap
set identity_insert your_table on
INSERT VALUES ( 2, ... ) -- filled gap again
set identity_insert your_table off

とにかく、何も言えない場合は、1つのテーブルでフラグを使用することをお勧めします。

したがって、フラグを反転するだけで、IDを苦労したり確認したりする必要がなくなります。

于 2012-09-19T13:53:52.730 に答える
4

はい。

set identity_insert YourTable on
insert YourTable (YourID, OtherField) values ( ... 
set identity_insert YourTable off
于 2012-09-19T13:48:49.677 に答える