如何在SQL Server中为自动增量列指定特定值?

Ach*_*les 2 sql sql-server

我在sql server中有一个自动增量标识列,但我想为其中一行指定一个特定的值.所以号码方案如下:

1 ...,
2....,
999 - for the reserved entry,
3....,
n....
Run Code Online (Sandbox Code Playgroud)

我怎样才能做到这一点?

JNK*_*JNK 6

你需要使用IDENTITY_INSERT:

SET IDENTITY_INSERT MyTableName ON

INSERT INTO MyTableName
(IdField, <list of all the fields>)
VALUES
(999, <list of other values)

SET IDENTITY_INSERT MyTableName OFF

DBCC CHECKIDENT(MyTableName, RESEED, 2)
Run Code Online (Sandbox Code Playgroud)

您还必须在INSERT语句中使用显式字段列表,并且IDENTITY_INSERT每个会话限制为一个活动字段.

如果种子值高于当前ID值,这也会将种子值重置为您插入的内容.

你可以通过使用来解决这个问题,DBCC CHECKIDENT但管理起来会很痛苦.


Rem*_*anu 5

您可以使用IDENTITY_INSERT:

SET IDENTITY_INSERT [tablename] ON;
INSERT INTO [tablename] (identitycolumn, ... ) VALUES (999, ...);
SET IDENTITY_INSERT [tablename] OFF;
Run Code Online (Sandbox Code Playgroud)

不得不求助于此始终是代码味道.作为表填充或复制数据的数据加载实践,它是可接受的.对于"保留"ID的应用程序是一种不好的做法,并指出数据模型设计缺陷.