如何将非自动增量的具有外键约束的主键更改为自动增量?

9 浏览
0 Comments

如何将非自动增量的具有外键约束的主键更改为自动增量?

我有一个名为Employees的表:

  • EmpId int not null
  • EmpName nvarchar
  • ...

然而,该表被其他表通过外键引用,即EmpId是其他表中的外键。

以下代码无效:

USE MyDatabase
ALTER TABLE [MyDatabase].[EmployeesSchema].[Employees] 
DROP CONSTRAINT PK_Employees
ALTER TABLE [MyDatabase].[EmployeesSchema].[Employees] 
DROP COLUMN EmpId
ALTER TABLE [MyDatabase].[EmployeesSchema].[Employees] 
   ADD TempColumn INT IDENTITY(1,1)
ALTER TABLE [MyDatabase].[EmployeesSchema].[Employees]
   ADD CONSTRAINT PK_Employees PRIMARY KEY (TempColumn)
GO
sp_RENAME '[MyDatabase].[EmployeesSchema].[Employees].TempColumn', 'EmpId' , 'COLUMN'
GO

它产生以下结果:

约束'PK_Employees'正在被表'Clients'引用,

外键约束'Employees_Clients_FK'。

即使有外键约束,我如何将EmpId更改为自动递增?

0
0 Comments

如果你希望保留之前的所有id值,可以按照以下步骤进行操作:

1. 首先,执行以下SQL查询语句,获取当前表中的最大EmpId值:

select max(EmpId)
from employees

2. 然后,更新表中的EmpId列属性,将IsIdentity属性设置为Yes,并将IdentitySeed属性设置为上一步查询结果的值。这样,所有新的记录将会自动生成一个从最大EmpId值开始的自增列,以避免与之前的值冲突。

通过以上步骤,你可以将具有外键约束且不是自增的主键更改为自增主键。这样可以确保新值不会与现有值冲突。

0