不能删除也不能在外键上找到约束

时间:2014-09-07 16:24:11

标签: sql-server-2012

我已经宣布了一个表,并对其中一个列进行了约束。由于无知(或者可能不愿意)改变桌子,我是这样做的。

drop table Test
create table Test(
  Id bigint primary key identity(1000,1),
  TypeId bigint not null foreign key references TestTypes(Id),
  StringValue nvarchar(100) null)

现在,愚蠢的服务器不允许我删除表...

我试过点击GUI。那里没有运气。我尝试通过 ALTER 添加删除新约束。无济于事。我试着用限制条件查看表格。它是空的。

所以,问题是两个人。

  1. 如何摆脱愚蠢的约束?
  2. 如果是愚蠢的约束,实际名称是什么?

1 个答案:

答案 0 :(得分:1)

您可以查询system catalog views以查找名称,并使用该名称来删除约束。

此代码删除表TypeId

中列Test上的外键约束
declare @n varchar(max) = 'alter table Test drop '

select @n = @n + fk.name 
from sys.foreign_keys fk
inner join sys.columns c on fk.parent_object_id = c.object_id 
inner join sys.tables t on t.object_id = c.object_id
where c.name = 'TypeId' and t.name = 'Test'

exec (@n)