sql—从特定数字开始现有表/列中的标识

4ngedf3f  于 2021-07-24  发布在  Java
关注(0)|答案(3)|浏览(473)

我有一个包含数千条记录的现有表,其中包含主键、外键和关系。我必须将主键列设置为identity,但我不想从0开始,因为表有现有记录,而且我也不想丢失数据。
我必须保留确切的table设计。
我必须添加一个标识,然后重新设置种子。我该怎么办?
谢谢您!

siotufzp

siotufzp1#

只需用id更新表。然后选择要执行的当前最大id

DBCC CHECKIDENT ('MyTable', RESEED, maxId)

有关重新播种的详细信息

uyhoqukh

uyhoqukh2#

不能向现有表添加标识。必须将标识指定为表创建的一部分。你有两个选择。
重新创建具有标识的新表,正确设置了reseed值并设置了identity\u insert on&将现有行插入新表并设置identity\u 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, col1, 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
vc9ivgsu

vc9ivgsu3#

我找到了解决办法:
在ssms->tools->options->designers:从“阻止保存需要重新创建表的更改”中删除v。
在设计模式下打开该表,并将v添加到identity sSpecification属性。
这也会自动重新设定种子。

相关问题