我在sql server中有一个自动增量标识列,但我想为其中一行指定一个特定的值.所以号码方案如下:
1 ...,
2....,
999 - for the reserved entry,
3....,
n....
Run Code Online (Sandbox Code Playgroud)
我怎样才能做到这一点?
你需要使用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但管理起来会很痛苦.
您可以使用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的应用程序是一种不好的做法,并指出数据模型设计缺陷.
| 归档时间: |
|
| 查看次数: |
3056 次 |
| 最近记录: |