2

IDENTITY_INSERT について質問があります。これを ON に変更すると、SQL Server は AUTOINC_NEXT 値を ID として最後に挿入された値に自動的に変更します。

したがって、ID = 1 の行を 1 つだけ取得し、IDENTITY_INSERT が ON のときに ID = 100 の行を挿入すると、次の挿入行の ID = 101 になります。再シードする必要なく 2 にしたいと思います。

このような動作は、SQL Server Compact 3.5 に既に存在します。IDENTITY_INSERT = ON で挿入を行っている間、SQL Server 2008 が AUTOINC_NEXT 値を変更しないようにすることは可能ですか?

4

3 に答える 3

1

なぜあなたはそれをしたいのですか?そもそも、本番システムでID挿入をONに設定することはほとんどないはずです。そして、いくつかスキップした場合、どのような違いがありますか?ロールバックを実行するとスキップされるため、どのイベントでもスキップしないIDを信頼することはできません。

于 2010-06-14T17:29:28.290 に答える
1

私はこの動作を防ぐ方法を知りません - 結局のところ、それは賢明なことなのです! すでに値を設定している場合x(その値が何であれ)、シード値をそれ以外xの場合よりも低くしたままにしないでください。 IDENTITY 列に既に存在する値を取得することに遭遇することになります - 良いことではありませんする場所!

ただし、必要に応じて、次を使用して、挿入が完了した後に IDENTITY 列を再シードできます。

DBCC CHECKIDENT ('YourTableName', RESEED, 300);

ここで、任意の値を新しいシード値 (ここでは 300) として設定できます。もちろん、再シード値を低く設定しすぎて重複を作成しないように特に注意する必要があります。

于 2010-06-14T17:18:07.190 に答える
1

さらに、再シードを行い、ID 列も主キーである場合、IDENTITY_INSERT tablename ON が設定されたときに最初に挿入された値に戻ると、PK 違反が発生します。考えるべきもう一つのこと。

于 2010-06-14T17:19:52.340 に答える