2011-09-03 24 views
13

Attualmente sto creando nuove tabelle nel mio database SQL Server. Sto rinominando le vecchie tabelle, quindi anche i vincoli di chiave esterna.Come modificare il nome della chiave esterna?

Per utilizzare il DB Adventureworks come esempio la tabella SalesOrderDetail ha FK_SalesOrderDetail_SalesOrderHeader_SalesOrderId (che collega alla tabella SalesOrderHeader).

Is sta cambiando il nome di questa chiave esterna sufficiente o devo anche bisogno di cambiare il riferimento chiave esterna nella tabella SalesOrderHeader?

risposta

16

Solo il nome - non cambierà la relazione in alcun modo.

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

NB: Questo chiave esterna in AdventureWorks è nel Sales schema così l'argomento è object_name schema qualificato nella chiamata procedura di cui sopra.

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 
Problemi correlati