13

ID 列の ID シードを永続的に変更する方法はありますか? DBCC CHECKIDENT を使用すると、last_value が設定されているように見えます。テーブルが切り捨てられると、すべての値がリセットされます。

dbcc checkident ('__Test_SeedIdent', reseed, 1000)

select name, seed_value, increment_value, last_value
from sys.identity_columns
where [object_id] = OBJECT_ID('__Test_SeedIdent');

戻り値

name      seed_value  increment_value  last_value
-------------------------------------------------
idIdent   1           1                1000

私はいくつかの構文が

alter table dbo.__Test_SeedIdent alter column idIdent [int] identity(1000,1) NOT NULL

存在するでしょう。

新しい列を作成し、値を移動し、元の列を削除して、新しい列の名前を変更する必要がありますか?

4

4 に答える 4

16

Books Onlineから:

「元のシード値を変更して既存の行を再シードするには、ID列を削除して、新しいシード値を指定して再作成する必要があります。テーブルにデータが含まれている場合、ID番号は、指定されたシード値と増分値で既存の行に追加されます。行が更新される順序は保証されません。」

于 2010-01-26T14:43:29.113 に答える
3

MSSQLでは、TSQLを介して既存の列のIDを簡単に追加または変更することはできません。列を削除して、再度追加する必要があります。言うまでもなく、これはFK関係で地獄を演じることができます。エンタープライズマネージャーで直接行うことができます。ただし、これを多数の列に対して実行する必要がある場合は、それは面白くありません。

新しい列を作成し、値を移動し、元の列を削除して、新しい列の名前を変更する必要がありますか?

はい、その列に関連付けられているすべてのインデックス、外部キー関係などを修正/更新することを忘れないでください

于 2010-01-26T13:52:08.670 に答える
0

「新しい列を作成し、値を移動し、元の列を削除して、新しい列の名前を変更する必要がありますか?」

実際、Enterprise Manager では、既存のテーブルに ID 列を追加する (または INT PK フィールドを INT PK ID に変更する) と、バックグラウンドでこれが行われます。

于 2010-01-26T14:34:06.603 に答える