sp_rename (Transact-SQL)

適用対象:SQL ServerAzure SQL DatabaseAzure SQL Managed InstanceAzure Synapse AnalyticsMicrosoft Fabric の SQL 分析エンドポイントMicrosoft Fabric のウェアハウス

現在のデータベース内のユーザー作成オブジェクトの名前を変更します。 このオブジェクトには、テーブル、インデックス、列、別名データ型、または Microsoft を指定できます。

.NET Framework 共通言語ランタイム (CLR) ユーザー定義型。

重要

この記事を含め、一部のシステム オブジェクトと Transact-SQL 構文は、Azure Synapse Analytics のサーバーレス SQL プールではサポートされていません。 詳細については、T-SQL サポートを参照してください

注意事項

オブジェクト名の一部または全部を変更すると、スクリプトおよびストアド プロシージャが壊れる可能性があります。 このステートメントを使用して、ストアド プロシージャ、トリガー、ユーザー定義関数、またはビューの名前を変更しないことをお勧めします。代わりに、オブジェクトを削除し、新しい名前で再作成します。

Transact-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 部構成の名前である必要があり、識別子の規則に従う必要があります。 newnamesysname で、既定値はありません。

トリガー名を #または ## で始めることはできません。

Microsoft Fabric の Warehouse に 適用されます。

  • スキーマ名を含/\めたり、末尾に ..
  • テーブル名を含/\めたり、末尾に ..

[ @objtype = ] 'object_type'

名前を変更するオブジェクトの種類。 object_typeは varchar(13) で、既定値は NULL、これらの値のいずれかになります。

Value 説明
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 必要があることを指定する必須の値です。 列の名前は、ディストリビューション列でない場合にのみ変更できます。 sp_rename は、ユーザー オブジェクト内の a COLUMN の名前を変更するためにのみ使用できます。

適用対象: 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 では、sp_rename専用 SQL プールのプレビュー段階です。

アクセス許可

オブジェクト、列、およびインデックスの名前を変更するには、オブジェクトに対する 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.table2OBJECT変更します。

EXEC sp_rename @objname = 'dbo.table1', @newname = 'table2', @objtype = 'OBJECT';