如何更改外键名称?

时间:2011-09-03 00:58:37

标签: sql-server sql-server-2005

我目前正在SQL Server数据库中创建新表。我正在重命名旧表,所以也是外键约束。

要使用Adventureworks DB作为示例,SalesOrderDetail表具有FK_SalesOrderDetail_SalesOrderHeader_SalesOrderId(链接到SalesOrderHeader表)。

是否正在更改此外键的名称,还是需要更改SalesOrderHeader表中的外键引用?

2 个答案:

答案 0 :(得分:18)

只是名称 - 它不会以任何方式改变关系。

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

注意:AdventureWorks中的外键位于Sales模式中,因此object_name参数在上面的过程调用中是模式限定的。

答案 1 :(得分: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