如何解决在现有表/列中从特定数字开始标识
我有一个包含数千条记录、主键、外键和关系的现有表。必须把主键列设置为identity,但不想从0开始,因为表有记录,也不想丢数据。
我必须保存确切的表格设计。
谢谢!
解决方法
只需更新带有 ID 的表。然后选择要执行的当前最大 ID
str_date = real_date.strftime('%Y%m%d')
# 19801107
,
您不能向现有表添加身份。必须在表创建过程中指定身份。你有两个选择。
- 重新创建新表,并使用重新设定的值正确设置身份 & 设置 IDENTITY_INSERT ON & 将现有行插入新表 & IDENTITY_INSERT OFF。
CREATE TABLE [dbo].[NewTable](
[ID] [int] IDENTITY(1000,1) NOT NULL PRIMARY KEY,-- 1000 is Reseed value
Col1
Col2
);
-- SET IDENTITY_INSERT to ON.
SET IDENTITY_INSERT dbo.NewTable ON;
GO
INSERT INTO NewTable(Id,col1,col2...)
SELECT Id,col2... FROM oldtable;
GO
SET IDENTITY_INSERT dbo.NewTable OFF;
GO
- 创建一个将起始值作为重新种子值的序列,并将该序列用于您以后的插入。
CREATE SEQUENCE dbo.TestSeq
START WITH 1000 -- Reseed value
INCREMENT BY 1 ;
GO
INSERT Test.TestTable (ID,Col1,Col2,...)
VALUES (NEXT VALUE FOR dbo.TestSeq,1,2,...) ;
GO
,
我找到了解决方案:
- 在 SSMS -> 工具 -> 选项 -> 设计器:从“防止保存需要重新创建表的更改”中删除 V。
- 在设计模式下打开表,并将 V 添加到 Identity Scification 属性。
这也会自动重新播种。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。