Esto le permitirá caer una restricción de clave externa específica basada en nombredetabla + columna de nombre
Después de probar las otras respuestas que acaba de tener un hurgar en las tablas del sistema hasta que encontré algo probablemente mirando.
la que desea es Constraint_Column_Usage que de acuerdo con los documentos Returns one row for each column in the current database that has a constraint defined on the column.
Me he unido a sys.objects para obtener sólo las claves externas.
En un procedimiento (esto toma prestado de las otras respuestas Saludos muchachos.!):
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
Puede utilizar la táctica anterior con sp_rename así para que los nombres más legible si se quiere hacer eso en lugar de solo déjalos caer. –
¿Hay alguna manera de evitar eliminar todas las restricciones sin nombre de la tabla? Por ejemplo: "dropFK 'Machines', 'IdArticle', 'Articles'", donde IdArticle es PK y Articles es la tabla a la que se hace referencia? – nano
Ciertamente, solo necesita profundizar un poco más en las tablas del sistema, restringiendo eso específicamente podría lograrse uniéndose a sysforeignkeys – cmsjr