Oggetti che dipendono da una tabella: DROP e ADD FOREIGN KEY CONSTRAINT
Ci si può trovare nella situazione di dover eliminare e ricreare (successivamente) le dipendenze (FOREIGN KEY) da una tabella alterando gli oggetti che dipendono da essa.
Pensiamo, ad esempio, alla necessità di eliminare e ricreare una tabella che ha integrità referenziale con altre, uno degli step necessari è appunto l’eliminazione delle dipendenze (FOREIGN KEY) sugli oggetti che dipendono dalla tabella da ricreare.
Il seguente comando T-SQL permette di individuare facilmente i comandi di eliminazione e ripristino delle FOREIGN KEY sulle tabelle che dipendono dalla tabella citata nella clausola WHERE del comando.
/* Scripting dei comandi DROP CONSTRAINT e ADD CONSTRAINT per le FOREIGN KEY definite sugli gli oggetti che dipendono da una tabella */
select ‘/* =———– DROP CONSTRAINT ———–= */’ as command
union all
select (‘alter table ’ + rtrim(objp.name) + ’ drop constraint ’ + constr.name) as command from sys.foreign_key_columns as fkc join sys.objects as objp on objp.object_id=fkc.parent_object_id join sys.objects as objr on objr.object_id=fkc.referenced_object_id join sys.columns as colr on colr.column_id=fkc.referenced_column_id and colr.object_id=fkc.referenced_object_id join sys.columns as colp on colp.column_id=fkc.parent_column_id and colp.object_id=fkc.parent_object_id join sys.objects as constr on constr.object_id=fkc.constraint_object_id where (objr.name = ‘’) and (objr.type = ‘U’)
union all
select ‘/* =———– ADD CONSTRAINT ———–= */’ as command
union all
select (‘alter table ’ + rtrim(objp.name) + ’ add constraint ’ + constr.name + ’ foreign key (’ + colp.name + ‘)’ + ’ references ’ + rtrim(objr.name)+’(’+colr.name+’)’) as command from sys.foreign_key_columns as fkc join sys.objects as objp on objp.object_id=fkc.parent_object_id join sys.objects as objr on objr.object_id=fkc.referenced_object_id join sys.columns as colr on colr.column_id=fkc.referenced_column_id and colr.object_id=fkc.referenced_object_id join sys.columns as colp on colp.column_id=fkc.parent_column_id and colp.object_id=fkc.parent_object_id join sys.objects as constr on constr.object_id=fkc.constraint_object_id where (objr.name = ‘’) and (objr.type = ‘U’); go