Questo vi permetterà di cadere uno specifico vincolo di chiave esterna sulla base di tablename + colonna nome
Dopo aver provato le altre risposte che ho appena avuto un poke in giro per le tabelle di sistema fino a quando ho trovato qualcosa probabilmente
quello che si desidera è Constraint_Column_Usage che secondo la documentazione Returns one row for each column in the current database that has a constraint defined on the column.
ho aderito a sys.objects per ottenere solo le chiavi esterne.
In una procedura (questo prende in prestito dalle altre risposte Ciao ragazzi.!):
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
fonte
2015-03-31 13:46:15
È possibile utilizzare la tattica di cui sopra con sp_rename anche per rendere i nomi più leggibile se si vuole fare questo, piuttosto che lasciateli cadere –
C'è un modo per evitare di eliminare tutti i vincoli senza nome dalla tabella? Ad esempio: "dropFK" Machines "," IdArticle "," Articoli "", dove IdArticle è il PK e Articoli è la tabella di riferimento? – nano
Certo, devi solo scavare un po 'più a fondo nelle tabelle di sistema, limitando ciò che specificamente potrebbe essere raggiunto unendo a sysforeignkeys – cmsjr