Как изменить имя внешнего ключа? - PullRequest
15 голосов
/ 03 сентября 2011

В настоящее время я создаю новые таблицы в моей базе данных SQL Server. Я переименовываю старые таблицы, а также ограничения внешнего ключа.

Чтобы использовать базу данных Adventureworks в качестве примера, таблица SalesOrderDetail имеет FK_SalesOrderDetail_SalesOrderHeader_SalesOrderId (которая ссылается на таблицу SalesOrderHeader).

Достаточно ли изменить имя этого внешнего ключа или мне также нужно изменить ссылку на внешний ключ в таблице SalesOrderHeader?

Ответы [ 2 ]

18 голосов
/ 03 сентября 2011

Только имя - это никак не изменит отношения.

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

Примечание: этот внешний ключ в AdventureWorks находится в схеме Sales, поэтому аргумент object_name соответствует схеме в приведенном выше вызове процедуры.

1 голос
/ 04 января 2013
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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...