2011-09-03 31 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