sp_rename (Transact-SQL)
適用対象:Microsoft Fabric の Microsoft Fabric
Warehouse の SQL Server
Azure SQL Database
Azure Synapse Analytics
SQL 分析エンドポイント
現在のデータベース内のユーザー作成オブジェクトの名前を変更します。 このオブジェクトには、テーブル、インデックス、列、別名データ型、または Microsoft を指定できます。
.NET Framework 共通言語ランタイム (CLR) ユーザー定義型。
重要
この記事を含め、一部のシステム オブジェクトと Transact-SQL 構文は、Azure Synapse Analytics のサーバーレス SQL プールではサポートされていません。 詳細については、T-SQL サポートを参照してください。
注意事項
オブジェクト名の一部または全部を変更すると、スクリプトおよびストアド プロシージャが壊れる可能性があります。 このステートメントを使用して、ストアド プロシージャ、トリガー、ユーザー定義関数、またはビューの名前を変更しないことをお勧めします。代わりに、オブジェクトを削除し、新しい名前で再作成します。
構文
sp_rename
SQL Server と Azure SQL Database の構文:
sp_rename [ @objname = ] 'object_name' , [ @newname = ] 'new_name'
[ , [ @objtype = ] 'object_type' ]
sp_rename
Azure Synapse Analytics での (プレビュー) の構文:
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_nameは table.index または schema.table.index の形式である必要があります。 名前を変更するオブジェクトが制約である場合、object_nameは schema.constraint 形式である必要があります。
引用符は、修飾オブジェクトを指定する場合のみ必要です。 データベース名を含む完全修飾名を指定する場合、データベース名は現在のデータベースの名前である必要があります。 object_nameは nvarchar(776) で、既定値はありません。
[ @newname = ] 'new_name'
指定したオブジェクトの新しい名前。 new_nameは 1 部構成の名前である必要があり、識別子の規則に従う必要があります。 newname は sysname で、既定値はありません。
Note
トリガー名を #または ## で始めることはできません。
[ @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 | CREATE TYPE または sp_addtypeを実行して追加された CLR ユーザー定義型。 |
適用対象:Azure Synapse Analytics
Azure Synapse Analytics の ( sp_rename
プレビュー) では、 COLUMN
名前を変更するオブジェクトの種類が列であり、常にステートメントに含める sp_rename
必要があることを指定する必須の値です。 列の名前は、ディストリビューション列でない場合にのみ変更できます。
適用対象: Microsoft Fabric
sp_rename
Microsoft Fabric の Warehouse では、OBJECT
@objtypeでサポートされている唯一の値です。
sp_rename
Microsoft Fabric の SQL エンドポイントでは、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 では、専用 SQL プールのプレビュー段階にあり、sp_rename
ユーザー オブジェクト内の名前を変更COLUMN
するためにのみ使用できます。
アクセス許可
オブジェクト、列、およびインデックスの名前を変更するには、オブジェクトに対する ALTER 権限が必要です。 ユーザー定義型の名前を変更するには、その型に対する CONTROL 権限が必要です。 データベースの名前を変更するには、sysadmin または dbcreator 固定サーバー ロールのメンバーシップが必要です。 台帳テーブルの名前を変更するには、ALTER LEDGER 権限が必要です。
例
A. テーブル名の変更
次の例では、Sales
スキーマの SalesTerritory
テーブルの名前を SalesTerr
に変更します。
USE AdventureWorks2022;
GO
EXEC sp_rename 'Sales.SalesTerritory', 'SalesTerr';
GO
B. 列の名前変更
次の例では、テーブルTerrID
内の列のTerritoryID
名前を SalesTerritory
.
USE AdventureWorks2022;
GO
EXEC sp_rename 'Sales.SalesTerritory.TerritoryID', 'TerrID', 'COLUMN';
GO
C: インデックスの名前を変更する
次の例では、インデックスIX_VendorID
の名前を IX_ProductVendor_VendorID
.
USE AdventureWorks2022;
GO
EXEC sp_rename N'Purchasing.ProductVendor.IX_ProductVendor_VendorID', N'IX_VendorID', N'INDEX';
GO
D. 別名データ型の名前を変更する
次の例では、別名データ型Telephone
の名前を Phone
.
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. 列の名前変更
次の例では、テーブルcol1
内の列のc1
名前を table1
.
Note
この Azure Synapse Analytics 機能は、専用 SQL プールのプレビュー段階であり、現在、スキーマ内の dbo
オブジェクトでのみ使用できます。
CREATE TABLE table1 (c1 INT, c2 INT);
EXEC sp_rename 'table1.c1', 'col1', 'COLUMN';
GO
H. オブジェクトの名前を変更する
次の例では、型を使用してテーブルdbo.table1
の名前をdbo.table2
OBJECT
変更します。
EXEC sp_rename @objname = 'dbo.table1', @newname = 'table2', @objtype = 'OBJECT';
関連するコンテンツ
フィードバック
フィードバックの送信と表示