如何更改sql server中的主键值?

如何更改sql server中的主键值?,sql,sql-server,sql-server-2014,Sql,Sql Server,Sql Server 2014,我正在使用SQL server 2014 在我的表中,我为列设置了主键。主键值从1开始。我想将其更改为从0开始。我怎样才能做到这一点呢?您可以为它重新设定种子 DBCC CHECKIDENT ('TableName', RESEED, 0); GO 这将创建一个表,其中autoinc字段以0而不是1开头 此外,最好命名主键 CREATE TABLE myTable ( id int IDENTITY(0,1), othercolumn int, and so on...

我正在使用SQL server 2014


在我的表中,我为列设置了主键。主键值从1开始。我想将其更改为从0开始。我怎样才能做到这一点呢?

您可以为它重新设定种子

DBCC CHECKIDENT ('TableName', RESEED, 0);
GO

这将创建一个表,其中autoinc字段以0而不是1开头
此外,最好命名主键

CREATE TABLE myTable
(
    id int IDENTITY(0,1),
    othercolumn int,
    and so on...

    constraint PK_myTableID primary key (id)
)

但是,如果要对现有表执行此操作,最好的选择是在表为空时使用的anwser,最简单的方法是删除该表,并像以前一样使用0的标识种子重新创建它。如果表中有数据,将主键更改为0(如所述)将是一个坏主意,因为在它插入一个键为0的行之后,下一个键将是1,它可能已经在表中,因此将导致进一步的插入失败,并出现主键重复错误

因此,如果您有现有数据,但必须有键为0的数据,我可能只会对第0行执行标识插入。使用以下方法执行此操作:

SET IDENTITY_INSERT mytable ON;

INSERT INTO mytable (id, col1, col2, etc..) 
VALUES (0, 'col1data','col2data', etc..);

SET IDENTITY_INSERT mytable OFF;

只需确保一次运行所有这些,因为一旦您打开identity insert,其他插入可能会失败,直到您关闭它。

不要。主键的作用是唯一地标识每一行。如果更改该值,则会断开该值与行之间的链接。是指在现有表中还是在新表中?对于现有表,您不需要。在现有表中,我希望将主键值更改为从0开始。如果此表被另一个表用作外键,则您的关系将变得混乱。在这种情况下,如果不更改与此ONOK相关的所有表上所有外键的所有值,这是不可能的。我会试试。这似乎是现有表的最佳选择,因为您可以保留所有其他记录的所有键值不变,只需插入一个键值为0的新记录。所以我给你+1分