Home > Scripts > Oggetti che dipendono da una tabella: DROP e ADD FOREIGN KEY CONSTRAINT

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 = ‘<nome_tabella>’)
  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 = ‘<nome_tabella>’)
  and (objr.type = ‘U’);
go

 

Chi è Sergio Govoni

Sergio Govoni è laureato in Scienze e Tecnologie Informatiche. Da oltre 16 anni lavora presso una software house che produce un noto sistema ERP, distribuito a livello nazionale ed internazionale, multi azienda client/server su piattaforma Win32. Attualmente si occupa di progettazione e analisi funzionale, coordina un team di sviluppo ed è responsabile tecnico di prodotto. Lavora con SQL Server dalla versione 7.0 e si è occupato d'implementazione e manutenzione di database relazionali in ambito gestionale, ottimizzazione delle prestazioni e problem solving. Nello staff di UGISS si dedica alla formazione e alla divulgazione in ambito SQL Server e tecnologie a esso collegate, scrivendo articoli e partecipando come speaker ai workshop e alle iniziative del primo e più importante User Group Italiano sulla tecnologia SQL Server. Ha conseguito la certificazione MCP, MCTS SQL Server. Per il suo contributo nelle comunità tecniche e per la condivisione della propria esperienza con altri, dal 2010 riceve il riconoscimento SQL Server MVP (Microsoft Most Valuable Professional). Nel corso dell'anno 2011 ha contribuito alla scrittura del libro SQL Server MVP Deep Dives Volume 2 (http://www.manning.com/delaney/).

Leggi Anche

Unit testing: Come scrivere la tua prima unit test!

Nell’articolo precedente, il secondo di questa serie, abbiamo descritto come installare il framework tSQLt, il …