1

まず、OPが実際にやろうとしていたのはID列をインクリメントしていなかったため、回答されなかったこの質問を認識しています


現在のシード値が x の ID 列があり、それを x+1 に再シードしたいと考えています (つまり、ID 列を x から x+2 に直接ジャンプさせたいと考えています。

次のコマンドを使用してそれを行うことができることを知っています

create procedure IncrementSeedValue
(
@TableName varchar(255),
@IncrementValue int
)
as

SET TRANSACTION ISOLATION LEVEL SERIALIZABLE;
BEGIN TRANSACTION;
    declare @v bigint
    select @v = IDENT_CURRENT(@TableName)+@IncrementValue
    DBCC CHECKIDENT (@TableName, RESEED, @v )
COMMIT TRANSACTION;
go

ただし、いくつか質問があります。

  • ここで分離レベル「シリアル化可能」は適切ですか?
  • SQL Server ミラーリングを使用している場合、問題が発生しますか?
  • 私が知っておくべき他の落とし穴はありますか?
4

1 に答える 1

1

INSERT ごとに IDENTITY 値が消費されます。

値を挿入してすぐに削除するか、値を挿入して ROLLBACK を発行します。

いずれの場合も、IDENTITY 値が消費されます。

DBCC コマンドを「通常の」コードで使用し、管理タスクのみに使用する必要があるとは思いません。

または、SET IDENTITY_INSERT ON を使用して、スキップされた値を含む次の値を計算できる場合。

于 2009-09-24T12:38:39.307 に答える