2

我有关于 IDENTITY_INSERT 的问题。当您将其更改为 ON 时,SQL Server 会自动将 AUTOINC_NEXT 值更改为最后插入的值作为标识。

因此,如果您只有一行 ID = 1,并且在 IDENTITY_INSERT 为 ON 时插入 ID = 100 的行,那么下一个插入行的 ID = 101。我希望它是 2 而无需重新播种。

SQL Server Compact 3.5 中已经存在这种行为。是否可以强制 SQL Server 2008 在使用 IDENTITY_INSERT = ON 进行插入时不更改 AUTOINC_NEXT 值?

4

3 回答 3

1

我不知道有什么方法可以防止这种行为 - 毕竟,无论如何,这是一件谨慎的事情!如果您已经设置了一个值x(无论该值可能是什么),那么您的种子值不应低于此值,x否则,您必然会在 IDENTITY 列中获得一个已经存在的值 - 这不好去的地方!

但是,如果必须,您可以在完成插入后重新播种 IDENTITY 列,方法是:

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

您可以将任意值设置为新的种子值(此处为:300)。当然,您需要格外小心,不要通过将 reseed 值设置得太低来创建任何重复项。

于 2010-06-14T17:18:07.190 回答
1

此外,如果您进行了重新设定并且您的标识列也是主键,那么当您在设置 IDENTITY_INSERT 表名 ON 时返回到最初插入的值时,您将遇到 PK 违规。另一件要考虑的事情。

于 2010-06-14T17:19:52.340 回答
1

你为什么想这么做?首先,在生产系统中几乎没有将身份插入设置为 ON 的情况。如果你跳过一些会有什么不同?您不能指望身份在任何情况下都不会跳过,因为如果您进行回滚,它将跳过。

于 2010-06-14T17:29:28.290 回答