1

首先,我知道这个问题没有得到回答,因为 OP 真正想做的不是增加身份列


我有一个当前种子值为 x 的标识列,我想将其重新设置为 x+1(即我希望我的标识列直接从 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 值。

我要么插入一个值并立即删除它,要么插入该值并发出回滚。

在任何一种情况下,都会消耗 IDENTITY 值。

我不认为 DBCC 命令应该在“正常”代码中使用,而应该只用于管理任务。

或者,如果您可以使用 SET IDENTITY_INSERT ON 并计算跳过值的下一个值应该是什么。

于 2009-09-24T12:38:39.307 回答