Это позволит вам удалить конкретное ограничение внешнего ключа на основе имени таблицы + имени столбца
После того, как я попробовал другие ответы, я просто копался в системных таблицах, пока не нашел что-то вероятное, выглядящее.
Вам нужен Constraint_Column_Usage, который в соответствии с документами Returns one row for each column in the current database that has a constraint defined on the column.
Я присоединился к sys.objects, чтобы просто получить внешние ключи.
В процедуре (это заимствует из других ответов. Ура, ребята!):
Create Proc yourSchema.dropFK(@SchemaName NVarChar(128), @TableName NVarChar(128), @ColumnName NVarChar(128))
as
Begin
DECLARE @ConstraintName nvarchar(128)
SET @ConstraintName = (
select c.Constraint_Name
from Information_Schema.Constraint_Column_usage c
left join sys.objects o
on o.name = c.Constraint_Name
where c.TABLE_SCHEMA = @SchemaName and
c.Table_name = @TableName and
c.Column_Name = @ColumnName and
o.type = 'F'
)
exec ('alter table [' + @SchemaName + '].[' + @TableName + '] drop constraint [' + @ConstraintName + ']')
End