sp_rename
を使用できます CHECK
の名前を変更するシステムストアドプロシージャ SQLServerの制約。
このストアドプロシージャの目的は、現在のデータベースでユーザーが作成したオブジェクトの名前を変更できるようにすることです。したがって、これを使用して、テーブル、列、エイリアスデータ型などの他のオブジェクトの名前を変更することもできます。
構文
sp_rename
の構文 このようになります:
sp_rename [ @objname = ] 'object_name' , [ @newname = ] 'new_name' [ , [ @objtype = ] 'object_type' ]
したがって、コードは次のようになります。
sp_rename 'schema_name.old_constraint_name', 'new_constraint_name';
Microsoftのドキュメントには、制約の名前を変更するときに、既存の名前をスキーマ名で修飾する必要があると記載されていることに注意してください。
次の例は、CHECK
の名前を変更する方法を示しています 制約。
例1-名前を変更する制約を選択する
まず、CHECK
をリストアップしましょう データベースに制約があるため、名前を変更するものを決定できます。
SELECT name, SCHEMA_NAME(schema_id) AS 'Schema', OBJECT_NAME(parent_object_id) AS 'Table', definition FROM sys.check_constraints;
結果:
+-----------------+----------+----------------+----------------------------------------+ | name | Schema | Table | definition | |-----------------+----------+----------------+----------------------------------------| | chkPrice | dbo | ConstraintTest | ([Price]>(0)) | | chkValidEndDate | dbo | ConstraintTest | ([EndDate]>=[StartDate]) | | chkTeamSize | dbo | ConstraintTest | ([TeamSize]>=(5) AND [TeamSize]<=(20)) | | chkJobTitle | dbo | Occupation | ([JobTitle]<>'Digital Nomad') | +-----------------+----------+----------------+----------------------------------------+
2番目の制約の名前を変更しましょう( chkValidEndDate 。
有効 を削除しましょう chkEndDate になるように分割します 。
例2–制約の名前を変更する
これを実行して、制約の名前を変更します。
sp_rename 'dbo.chkValidEndDate', 'chkEndDate';
したがって、古い(既存の)名前が最初に来て、次に新しい名前が続きます。
したがって、すべてのCHECK
を選択すると もう一度制約すると、次の結果が得られます。
SELECT name, SCHEMA_NAME(schema_id) AS 'Schema', OBJECT_NAME(parent_object_id) AS 'Table', definition FROM sys.check_constraints;
結果:
+-------------+----------+----------------+----------------------------------------+ | name | Schema | Table | definition | |-------------+----------+----------------+----------------------------------------| | chkPrice | dbo | ConstraintTest | ([Price]>(0)) | | chkEndDate | dbo | ConstraintTest | ([EndDate]>=[StartDate]) | | chkTeamSize | dbo | ConstraintTest | ([TeamSize]>=(5) AND [TeamSize]<=(20)) | | chkJobTitle | dbo | Occupation | ([JobTitle]<>'Digital Nomad') | +-------------+----------+----------------+----------------------------------------+
制約の名前が変更されました。
前述のように、sp_rename
ストアドプロシージャは、CHECK
だけに限定されません。 制約。まったく同じ構文を使用して、外部キー制約、テーブル、列、エイリアスデータ型、またはその他のユーザー定義オブジェクトの名前を変更できます。
ただし、Microsoftは、ストアドプロシージャ、トリガー、ユーザー定義関数、またはビューの名前を変更しないことをお勧めします。このような場合は、代わりにオブジェクトを削除して、新しい名前で再作成することをお勧めします。