Как изменить имя внешнего ключа?
В настоящее время я создаю новые таблицы в своей базе данных SQL Server. Я переименовываю старые таблицы, а также ограничения внешнего ключа.
Чтобы использовать DB Adventureworks в качестве примера, таблица SalesOrderDetail имеет FK_SalesOrderDetail_SalesOrderHeader_SalesOrderId (которая ссылается на таблицу SalesOrderHeader).
Является ли изменение этого внешнего ключа достаточным или мне также нужно изменить ссылку внешнего ключа в таблице SalesOrderHeader?
Ответы
Ответ 1
Просто имя - это никак не изменит отношения.
EXEC sp_rename 'Sales.FK_SalesOrderDetail_SalesOrderHeader_SalesOrderId',
'new_name',
'OBJECT';
NB: этот внешний ключ в AdventureWorks находится в схеме Sales
, поэтому аргумент object_name
является схемой, квалифицированной в вызове процедуры выше.
Ответ 2
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