如何在不插入值的情况下增加标识列?

时间:2009-09-24 10:37:29

标签: sql sql-server-2008 dbcc

首先,我知道this question没有得到解答,因为OP真正试图做的是没有增加一个标识列


我有一个当前种子值为x的标识列,我想将其重新设置为x + 1(即我希望我的标识列直接从x跳转到x + 2.

我知道我可以使用以下command

来做到这一点
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镜像
  • 会导致问题吗?
  • 我应该注意其他陷阱吗?

1 个答案:

答案 0 :(得分:1)

每个INSERT都会消耗IDENTITY值。

我会INSERT一个值并立即删除它,或者插入该值并发出ROLLBACK。

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

我不认为DBCC命令应该在“普通”代码中使用,并且只应保留用于管理任务。

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