sp_rename (Transact-SQL)
適用対象: SQL Server Azure SQL データベース Azure SQL Managed Instance Azure Synapse Analytics Microsoft Fabric の SQL 分析エンドポイント Microsoft Fabric のウェアハウス
現在のデータベース内のユーザー作成オブジェクトの名前を変更します。 このオブジェクトには、テーブル、インデックス、列、別名データ型、または Microsoft を指定できます。
.NET Framework 共通言語ランタイム (CLR) ユーザー定義型。
重要
この記事を含め、一部のシステム オブジェクトと Transact-SQL 構文は、Azure Synapse Analytics のサーバーレス SQL プールではサポートされていません。 詳細については、 T-SQL サポートを参照してください。
注意事項
オブジェクト名の一部または全部を変更すると、スクリプトおよびストアド プロシージャが壊れる可能性があります。 このステートメントを使用して、ストアド プロシージャ、トリガー、ユーザー定義関数、またはビューの名前を変更しないことをお勧めします。代わりに、オブジェクトを削除し、新しい名前で再作成します。
構文
SQL Server と Azure SQL Database での sp_rename
の構文:
sp_rename [ @objname = ] 'object_name' , [ @newname = ] 'new_name'
[ , [ @objtype = ] 'object_type' ]
Azure Synapse Analytics での sp_rename
(プレビュー) の構文:
sp_rename [ @objname = ] 'object_name' , [ @newname = ] 'new_name'
, [ @objtype = ] 'COLUMN'
Microsoft Fabric での sp_rename
の構文:
sp_rename [ @objname = ] 'object_name' , [ @newname = ] 'new_name'
[ , [ @objtype = ] 'OBJECT' ]
引数
[ @objname = ] 'object_name'
ユーザー オブジェクトまたはデータ型の現在の修飾名または非修飾名。 名前を変更するオブジェクトがテーブル内の列である場合、 object_name は table.column または schema.table.column の形式である必要があります。 名前を変更するオブジェクトがインデックスの場合、object_nametable.index または schema.table.index の形式である必要があります。 名前を変更するオブジェクトが制約の場合、 object_name は schema.constraint の形式である必要があります。
引用符は、修飾オブジェクトを指定する場合のみ必要です。 データベース名を含む完全修飾名を指定する場合、データベース名は現在のデータベースの名前である必要があります。 object_name は nvarchar(776)で、既定値はありません。
[ @newname = ] 'new_name'
指定したオブジェクトの新しい名前。 new_name は 1 部構成の名前である必要があり、識別子の規則に従う必要があります。 newname は sysname で、既定値はありません。
トリガー名を #または ## で始めることはできません。
Microsoft Fabric の Warehouse に適用されます。
- スキーマ名に
/
や\
を含めたり、末尾を.
にしたりすることはできません。 - テーブル名に
/
や\
を含めたり、末尾を.
にしたりすることはできません。
[ @objtype = ] 'object_type'
名前を変更するオブジェクトの種類。 object_type は varchar(13) で、既定値は NULL
で、これらの値のいずれかを指定できます。
値 | 説明 |
---|---|
COLUMN |
名前を変更する列。 |
DATABASE |
ユーザー定義データベース。 このオブジェクト型は、データベースの名前を変更するときに必要です。 |
INDEX |
ユーザー定義インデックス。 統計を使用してインデックスの名前を変更すると、統計の名前も自動的に変更されます。 |
OBJECT |
sys.objectsで追跡される型の項目。 たとえば、OBJECT を使用して、制約 (CHECK、FOREIGN KEY、PRIMARY/UNIQUE KEY)、ユーザー テーブル、ルールなどのオブジェクトの名前を変更できます。 |
STATISTICS |
適用対象: SQL Server 2012 (11.x) 以降と Azure SQL データベース。 ユーザーによって明示的に作成された統計、またはインデックスを使用して暗黙的に作成された統計。 インデックスの統計の名前を変更すると、インデックスの名前も自動的に変更されます。 |
USERDATATYPE |
適用対象:Azure Synapse Analytics
- Azure Synapse Analytics の
sp_rename
(プレビュー) では、COLUMN
は名前を変更するオブジェクトの種類が列であることを指定する必須の値であり、常にsp_rename
ステートメントに含める必要があります。 列の名前は、ディストリビューション列でない場合にのみ変更できます。sp_rename
は、ユーザー オブジェクト内のCOLUMN
の名前を変更するためにのみ使用できます。
適用対象: Microsoft Fabric
- Microsoft Fabric の Warehouse の
sp_rename
では、@objtypeでサポートされている値はOBJECT
のみです。 - Microsoft Fabric の SQL 分析エンドポイントの
sp_rename
では、OBJECT
のみが @objtypeでサポートされる値です。 テーブルの名前を変更することはできません。
リターン コードの値
0
(成功) または 0 以外の数値 (失敗)
解説
適用対象 SQL Server (サポートされているすべてのバージョン) と Azure SQL Database:
sp_rename
は、PRIMARY KEY 制約または UNIQUE 制約の名前が変更されるたびに、関連付けられているインデックスの名前を自動的に変更します。 名前が変更されたインデックスが PRIMARY KEY 制約に関連付けられている場合、PRIMARY KEY 制約もsp_rename
によって自動的に名前が変更されます。sp_rename
を使用して、プライマリ XML インデックスとセカンダリ XML インデックスの名前を変更できます。ストアド プロシージャ、関数、ビュー、またはトリガーの名前を変更しても、対応するオブジェクトの名前は、 sys.sql_modules の定義列 カタログ ビューで変更されたり、 OBJECT_DEFINITION 組み込み関数を使用して取得されたりすることはありません。 そのため、
sp_rename
これらのオブジェクト型の名前を変更するために使用しないことをお勧めします。 代わりに、オブジェクトを削除して新しい名前で再作成してください。
適用対象 SQL Server (サポートされているすべてのバージョン)、Azure SQL Database、および Azure Synapse Analytics:
テーブルや列などのオブジェクトの名前を変更しても、そのオブジェクトへの参照の名前は自動的に変更されません。 名前が変更されたオブジェクトを参照するすべてのオブジェクトを手動で変更する必要があります。 たとえば、テーブルの列の名前を変更するとき、その列がトリガーで参照されている場合は、新しい列名が反映されるようにトリガーに変更を加える必要があります。 オブジェクトの名前を変更する前には、 sys.sql_expression_dependencies を使ってオブジェクトの従属関係を一覧表示できます。
列の名前を変更しても、(
*
を使って) そのテーブルからすべての列を SELECT するオブジェクトのメタデータは自動的には更新されません。 たとえば、テーブル列の名前を変更し、(*
を使って) すべての列を SELECT する非スキーマ バインド ビューまたは関数からその列を参照する場合、ビューまたは関数のメタデータには、元の列名が引き続き反映されます。 メタデータを更新するには、sp_refreshsqlmodule または sp_refreshview を使います。現在のデータベース内のオブジェクトまたはデータ型の名前のみを変更できます。 ほとんどのシステム データ型とシステム オブジェクトの名前は変更できません。
新しい名前に 128 文字を超える文字を使用すると、最初の 128 文字のみが使用され、残りは切り捨てられます。
適用対象 Azure Synapse Analytics:
- Azure Synapse Analytics では、
sp_rename
は専用 SQL プールの Preview にあります。
アクセス許可
オブジェクト、列、およびインデックスの名前を変更するには、オブジェクトに対する ALTER 権限が必要です。 ユーザー定義型の名前を変更するには、その型に対する CONTROL 権限が必要です。 データベースの名前を変更するには、固定サーバー ロール sysadmin または dbcreator のメンバーシップが必要です。 台帳テーブルの名前を変更するには、ALTER LEDGER 権限が必要です。
例
A. テーブル名の変更
次の例では、Sales
スキーマの SalesTerritory
テーブルの名前を SalesTerr
に変更します。
USE AdventureWorks2022;
GO
EXEC sp_rename 'Sales.SalesTerritory', 'SalesTerr';
GO
B. 列の名前変更
次の例では、SalesTerritory
テーブルのTerritoryID
列の名前を TerrID
に変更します。
USE AdventureWorks2022;
GO
EXEC sp_rename 'Sales.SalesTerritory.TerritoryID', 'TerrID', 'COLUMN';
GO
C: インデックスの名前を変更する
次の例では、 IX_ProductVendor_VendorID
インデックスの名前を IX_VendorID
に変更します。
USE AdventureWorks2022;
GO
EXEC sp_rename N'Purchasing.ProductVendor.IX_ProductVendor_VendorID', N'IX_VendorID', N'INDEX';
GO
D. 別名データ型の名前を変更する
次の例では、 Phone
エイリアス データ型の名前を Telephone
に変更します。
USE AdventureWorks2022;
GO
EXEC sp_rename N'Phone', N'Telephone', N'USERDATATYPE';
GO
E. 制約の名前変更
次の例では、PRIMARY KEY 制約、CHECK 制約、および FOREIGN KEY 制約の名前を変更します。 制約の名前を変更する際は、制約が属するスキーマを指定する必要があります。
USE AdventureWorks2022;
GO
-- Return the current Primary Key, Foreign Key and Check constraints for the Employee table.
SELECT name, SCHEMA_NAME(schema_id) AS schema_name, type_desc
FROM sys.objects
WHERE parent_object_id = (OBJECT_ID('HumanResources.Employee'))
AND type IN ('C','F', 'PK');
GO
-- Rename the primary key constraint.
EXEC sp_rename 'HumanResources.PK_Employee_BusinessEntityID', 'PK_EmployeeID';
GO
-- Rename a check constraint.
EXEC sp_rename 'HumanResources.CK_Employee_BirthDate', 'CK_BirthDate';
GO
-- Rename a foreign key constraint.
EXEC sp_rename 'HumanResources.FK_Employee_Person_BusinessEntityID', 'FK_EmployeeID';
-- Return the current Primary Key, Foreign Key and Check constraints for the Employee table.
SELECT name, SCHEMA_NAME(schema_id) AS schema_name, type_desc
FROM sys.objects
WHERE parent_object_id = (OBJECT_ID('HumanResources.Employee'))
AND type IN ('C','F', 'PK');
GO
name schema_name type_desc
------------------------------------- ------------------ ----------------------
FK_Employee_Person_BusinessEntityID HumanResources FOREIGN_KEY_CONSTRAINT
PK_Employee_BusinessEntityID HumanResources PRIMARY_KEY_CONSTRAINT
CK_Employee_BirthDate HumanResources CHECK_CONSTRAINT
CK_Employee_MaritalStatus HumanResources CHECK_CONSTRAINT
CK_Employee_HireDate HumanResources CHECK_CONSTRAINT
CK_Employee_Gender HumanResources CHECK_CONSTRAINT
CK_Employee_VacationHours HumanResources CHECK_CONSTRAINT
CK_Employee_SickLeaveHours HumanResources CHECK_CONSTRAINT
(7 row(s) affected)
name schema_name type_desc
------------------------------------- ------------------ ----------------------
FK_Employee_ID HumanResources FOREIGN_KEY_CONSTRAINT
PK_Employee_ID HumanResources PRIMARY_KEY_CONSTRAINT
CK_BirthDate HumanResources CHECK_CONSTRAINT
CK_Employee_MaritalStatus HumanResources CHECK_CONSTRAINT
CK_Employee_HireDate HumanResources CHECK_CONSTRAINT
CK_Employee_Gender HumanResources CHECK_CONSTRAINT
CK_Employee_VacationHours HumanResources CHECK_CONSTRAINT
CK_Employee_SickLeaveHours HumanResources CHECK_CONSTRAINT
(7 row(s) affected)
F. 統計の名前を変更する
次の例では、contactMail1
という名前の統計オブジェクトを作成し、sp_rename
を使用して統計の名前をNewContact
に変更します。 統計の名前を変更する場合、オブジェクトは 'schema.table.statistics_name' の形式で指定する必要があります。
CREATE STATISTICS ContactMail1
ON Person.Person (BusinessEntityID, EmailPromotion)
WITH SAMPLE 5 PERCENT;
EXEC sp_rename 'Person.Person.ContactMail1', 'NewContact','Statistics';
例: Azure Synapse Analytics
G. 列の名前変更
次の例では、table1
テーブルのc1
列の名前を col1
に変更します。
Note
この Azure Synapse Analytics 機能は、専用 SQL プールのプレビュー段階にあり、現在、 dbo
スキーマ内のオブジェクトでのみ使用できます。
CREATE TABLE table1 (c1 INT, c2 INT);
EXEC sp_rename 'table1.c1', 'col1', 'COLUMN';
GO
H. オブジェクトの名前を変更する
次の例では、OBJECT
型を使用して、テーブルdbo.table1
の名前をdbo.table2
に変更します。
EXEC sp_rename @objname = 'dbo.table1', @newname = 'table2', @objtype = 'OBJECT';