To pozwoli Ci spaść konkretnego klucza obcego w oparciu o tablename + kolumny nazwy
Po wypróbowaniu innych odpowiedzi miałem tylko grzebać w tabelach systemowych aż znalazłem coś prawdopodobnie wyglądający.
Ten chcesz to Constraint_Column_Usage które zgodnie z docs Returns one row for each column in the current database that has a constraint defined on the column.
Mam dołączył go do sys.objects po prostu dostać klucze obce.
W procedurze (to pożycza od innych odpowiedzi wiwaty facetów.!):
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
Można użyć powyższej taktykę z procedury sp_rename także aby nazwy bardziej czytelny, jeśli chcesz zrobić, że zamiast po prostu je upuść. –
Czy istnieje sposób na uniknięcie upuszczenia wszystkich ograniczeń bez nazwy ze stołu? Na przykład: "dropFK" Machines "," IdArticle "," Articles "", gdzie IdArticle to PK a artykuły to tabela, do której się odwołujemy? – nano
Z pewnością wystarczy trochę głębiej zagłębić się w tabelach systemowych, ograniczając to, co konkretnie można osiągnąć, łącząc się z sysforeignkeys – cmsjr