2011-09-03 5 views
13

현재 SQL Server 데이터베이스에 새 테이블을 만듭니다. 이전 테이블의 이름을 바꾸고 있습니다. 외래 키 제약도 마찬가지입니다.외래 키 이름을 변경하는 방법?

예를 들어 Adventureworks DB를 사용하려면 SalesOrderDetail 테이블에 SalesOrderHeader 테이블에 연결되는 FK_SalesOrderDetail_SalesOrderHeader_SalesOrderId가 있어야합니다.

이 외래 키 이름이 충분히 변경 되었습니까? 아니면 SalesOrderHeader 테이블에서 외래 키 참조를 변경해야합니까?

답변

16

이름만으로도 관계가 변경되지는 않습니다.

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

NB 다음 object_name 인수가 위의 프로 시저 호출에 자격을 갖춘 스키마가 있도록하여 AdventureWorks에서 외래 키가 Sales 스키마에 있음.

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