2011-09-03 3 views
13

Obecnie tworzę nowe tabele w mojej bazie danych SQL Server. Zmieniam nazwy starych tabel, a więc także ograniczenia klucza obcego.Jak zmienić klucz obcy?

Aby użyć bazy danych Adventureworks jako przykładu, tabela SalesOrderDetail ma FK_SalesOrderDetail_SalesOrderHeader_SalesOrderId (która łączy się z tabelą SalesOrderHeader).

Czy zmiana nazwy tego klucza obcego jest wystarczająca, czy też muszę zmienić odwołanie do klucza obcego w tabeli SalesOrderHeader?

Odpowiedz

16

Po prostu nazwa - w żaden sposób nie zmieni związku.

EXEC sp_rename 'Sales.FK_SalesOrderDetail_SalesOrderHeader_SalesOrderId', 
       'new_name', 
       'OBJECT'; 

NB: To klucz obcy w AdventureWorks jest w schemacie Sales więc object_name argument jest schemat kwalifikacje do wywołania procedury powyżej.

1
SELECT Object_name(constraint_object_id), 
     Object_name(parent_object_id), 
     (SELECT name 
     FROM sys.columns 
     WHERE object_id = parent_object_id 
       AND column_id = parent_column_id), 
     Object_name(referenced_object_id), 
     (SELECT name 
     FROM sys.columns 
     WHERE object_id = referenced_object_id 
       AND column_id = referenced_column_id), 
     'sp_rename ''' + Object_name(constraint_object_id) + ''', ''con_fk_' + (SELECT Lower(name) 
                       FROM sys.columns 
                       WHERE object_id = parent_object_id 
                         AND column_id = parent_column_id) + ''',''OBJECT''' 
FROM sys.foreign_key_columns