2011-09-03 33 views
13

我目前在我的SQL Server數據庫中創建新表。我正在重命名舊錶,所以還有外鍵約束。如何更改外鍵名稱?

要使用Adventureworks DB作爲示例,SalesOrderDetail表的FK_SalesOrderDetail_SalesOrderHeader_SalesOrderId(鏈接到SalesOrderHeader表)。

正在改變這個外鍵的名稱是否足夠,或者我是否還需要更改SalesOrderHeader表中的外鍵引用?

回答

16

只是名稱 - 它不會以任何方式改變關係。

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

注:在國外AdventureWorks的關鍵是在Sales架構,以便在object_name說法是架構在上述過程調用合格。

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