我目前正在SQL Server数据库中创建新表。我正在重命名旧表,所以也是外键约束。
要使用Adventureworks DB作为示例,SalesOrderDetail表具有FK_SalesOrderDetail_SalesOrderHeader_SalesOrderId(链接到SalesOrderHeader表)。
是否正在更改此外键的名称,还是需要更改SalesOrderHeader表中的外键引用?
答案 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