sp_rename (Transact-SQL)
現在のデータベースでユーザーが作成したオブジェクトの名前を変更します。このオブジェクトには、テーブル、インデックス、列、別名データ型、または Microsoft .NET Framework 共通言語ランタイム (CLR) ユーザー定義型を指定できます。
注意 |
---|
オブジェクト名の一部または全部を変更すると、スクリプトおよびストアド プロシージャが壊れる可能性があります。ストアド プロシージャ、トリガー、ユーザー定義関数、またはビューの名前を変更する場合は、このステートメントを使用しないことをお勧めします。代わりに、オブジェクトを削除して新しい名前で再作成してください。 |
構文
sp_rename [ @objname = ] 'object_name' , [ @newname = ] 'new_name'
[ , [ @objtype = ] 'object_type' ]
引数
[ @objname = ] 'object_name'
ユーザー オブジェクトやデータ型に関する現在の修飾名または非修飾名を指定します。名前を変更するオブジェクトがテーブル内の列である場合、object_name は table.column または schema.table.column の形式で指定する必要があります。名前を変更するオブジェクトがインデックスである場合、object_name は table.index または schema.table.index の形式で指定する必要があります。引用符は、修飾オブジェクトを指定する場合のみ必要です。データベース名も含め完全修飾名で指定する場合、データベース名は現在のデータベースの名前であることが必要です。object_name のデータ型は nvarchar(776) で、既定値はありません。
[ @newname = ] 'new_name'
指定したオブジェクトの新しい名前を指定します。new_name には、1 つの要素で構成される、識別子の規則に従った名前を指定する必要があります。newname のデータ型は sysname で、既定値はありません。注 トリガー名の先頭に # または ## は使用できません。
[ @objtype = ] 'object_type'
名前を変更するオブジェクトの種類を指定します。object_type のデータ型は varchar(13) で、既定値は NULL です。次のいずれかの値を指定できます。値
説明
COLUMN
名前を変更する列。
DATABASE
ユーザー定義のデータベース。データベースの名前を変更する場合は、このオブジェクトの種類が必要です。
INDEX
ユーザー定義のインデックス。
OBJECT
sys.objects に記録される型の項目。たとえば、OBJECT を使用して、制約 (CHECK、FOREIGN KEY、PRIMARY/UNIQUE KEY)、ユーザー テーブル、ルールなどのオブジェクトの名前を変更できます。
USERDATATYPE
CREATE TYPE または sp_addtype を実行すると追加される別名データ型または CLR ユーザー定義型。
リターン コード値
0 (成功) または 0 以外の数値 (失敗)
説明
名前を変更できるのは、現在のデータベース内にあるオブジェクトまたはデータ型だけです。ほとんどのシステム データ型およびシステム オブジェクトの名前は変更できません。
sp_rename では、PRIMARY KEY (主キー) または UNIQUE (一意) 制約の名前を変更した場合、関連するインデックスの名前も自動的に変更されます。名前を変更したインデックスが PRIMARY KEY 制約に関連付けられている場合は、sp_rename によって PRIMARY KEY 制約の名前も自動的に変更されます。
sp_rename は、プライマリおよびセカンダリ XML インデックスの名前を変更する場合に使用できます。
ストアド プロシージャ、関数、ビュー、またはトリガーの名前を変更しても、sys.sql_modules カタログ ビューの definition 列にある、対応するオブジェクトの名前は変更されません。したがって、これらのオブジェクトの種類の名前を変更する場合は、sp_rename を使用しないことをお勧めします。代わりに、オブジェクトを削除して新しい名前で再作成してください。
テーブルや列などのオブジェクトの名前を変更しても、そのオブジェクトに対する参照は自動的には変更されません。名前を変更したオブジェクトを参照しているオブジェクトに対しては、手動で変更を加える必要があります。たとえば、テーブルの列の名前を変更するとき、その列がトリガーで参照されている場合は、新しい列名が反映されるようにトリガーに変更を加える必要があります。オブジェクトの名前を変更する前には、sys.sql_expression_dependencies を使ってオブジェクトの従属関係を一覧表示できます。
権限
オブジェクト、列、およびインデックスの名前を変更するには、そのオブジェクトに対する ALTER 権限が必要です。ユーザー定義型の名前を変更するには、その型に対する CONTROL 権限が必要です。データベースの名前を変更するには、sysadmin 固定サーバー ロールまたは dbcreator 固定サーバー ロールのメンバーシップが必要です。
例
A. テーブル名を変更する
次の例では、Sales スキーマの SalesTerritory テーブルの名前を SalesTerr に変更します。
USE AdventureWorks2008R2;
GO
EXEC sp_rename 'Sales.SalesTerritory', 'SalesTerr';
GO
B. 列名を変更する
次の例では、SalesTerritory テーブル内の TerritoryID 列の名前を TerrID に変更します。
USE AdventureWorks2008R2;
GO
EXEC sp_rename 'Sales.SalesTerritory.TerritoryID', 'TerrID', 'COLUMN';
GO
C. インデックス名を変更する
次の例では、IX_ProductVendor_VendorID インデックスの名前を IX_VendorID に変更します。
USE AdventureWorks2008R2;
GO
EXEC sp_rename N'Purchasing.ProductVendor.IX_ProductVendor_VendorID', N'IX_VendorID', N'INDEX';
GO
D. 別名データ型の名前を変更する
次の例では、Phone 別名データ型の名前を Telephone に変更します。
USE AdventureWorks2008R2;
GO
EXEC sp_rename N'Phone', N'Telephone', N'USERDATATYPE';
GO