【发布时间】:2015-11-12 14:22:34
【问题描述】:
我有一张桌子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”, 外键约束“Employees_Clients_FK”。
即使我有外键约束,如何将EmpId 更改为自动增量?
【问题讨论】:
-
在操作前禁用所有 FK,然后重新启用它们。见this question
-
删除 FK 然后重新添加它们。
-
@TabAlleman :这个
ALTER TABLE [myTable] NOCHECK CONSTRAINT ALL没有帮助,SQL Server 不会检查我在引用列中输入的值的内容,好的,但它仍然显示相同的消息。 -
@ZoffDino : 这个
ALTER TABLE [myTable] NOCHECK CONSTRAINT ALL没有帮助,SQL Server 不会检查我在引用列中输入的值的内容,好的,但它仍然显示相同的消息 -
不知道你从哪里得到的,但我说的是
DROPFK,然后重新创建它们。
标签: sql sql-server sql-server-2008 sql-server-2012 foreign-keys