sp_rename
を使用できます SQLServerで外部キー制約の名前を変更するためのシステムストアドプロシージャ。
このストアドプロシージャの目的は、現在のデータベースでユーザーが作成したオブジェクトの名前を変更できるようにすることです。これにより、テーブル、列、エイリアスデータ型などの他のオブジェクトの名前を変更することもできます。
構文
sp_rename
の構文 このようになります:
sp_rename [ @objname = ] 'object_name' , [ @newname = ] 'new_name' [ , [ @objtype = ] 'object_type' ]
したがって、コードは次のようになります。
sp_rename 'schema_name.old_fk_name', 'new_fk_name';
Microsoftのドキュメントには、制約(外部キーなど)の名前を変更する場合は、既存の名前をスキーマ名で修飾する必要があると記載されていることに注意してください。
スキーマを省略するとエラーが発生する場合と発生しない場合がありますが、これについてはMicrosoftのアドバイスに従うことをお勧めします。
次の例は、外部キーの名前を変更する方法を示しています。
例1-すべての外部キーを確認する
まず、データベース内の外部キーを確認します(名前を変更するキーを決定できるようにします)。
SELECT name AS 'Foreign Key', SCHEMA_NAME(schema_id) AS 'Schema', OBJECT_NAME(parent_object_id) AS 'Table', OBJECT_NAME(referenced_object_id) AS 'Referenced Table' FROM sys.foreign_keys;
結果:
+--------------------------------+----------+---------+--------------------+ | Foreign Key | Schema | Table | Referenced Table | |--------------------------------+----------+---------+--------------------| | FK_Albums_Artists | dbo | Albums | Artists | | FK_Albums_Genres | dbo | Albums | Genres | | FK__Artists__Country__4AB81AF0 | dbo | Artists | Country | +--------------------------------+----------+---------+--------------------+
3番目の外部キー( FK__Artists__Country__4AB81AF0 )はシステムによって名前が付けられています。作成時に名前を付けるのを忘れたため、システムが名前を付けました。
この外部キーにもっと簡潔な名前を付けましょう。
例2–外部キーの名前を変更する
これが外部キーの名前を変更するビットです。
sp_rename 'dbo.FK__Artists__Country__4AB81AF0', 'FK_Artists_Country';
前述のように、古い(既存の)名前が最初に来て、次に新しい名前が来ます。
したがって、すべての外部キーを選択すると、次の結果が得られます。
SELECT name AS 'Foreign Key', SCHEMA_NAME(schema_id) AS 'Schema', OBJECT_NAME(parent_object_id) AS 'Table', OBJECT_NAME(referenced_object_id) AS 'Referenced Table' FROM sys.foreign_keys;
結果:
+--------------------+----------+---------+--------------------+ | Foreign Key | Schema | Table | Referenced Table | |--------------------+----------+---------+--------------------| | FK_Albums_Artists | dbo | Albums | Artists | | FK_Albums_Genres | dbo | Albums | Genres | | FK_Artists_Country | dbo | Artists | Country | +--------------------+----------+---------+--------------------+
外部キーの名前を変更しました。