sys.sp_rename(Transact-SQL)

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

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

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

重要

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

注意事項

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

Transact-SQL 構文表記規則

構文

SQL Server と Azure SQL Database での sp_rename の構文:

sys.sp_rename
    [ @objname = ] N'objname'
    , [ @newname = ] N'newname'
    [ , [ @objtype = ] 'objtype' ]
[ ; ]

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 は table.column または schema.table.column の形式である必要があります。 名前を変更するオブジェクトがインデックスの場合、object_nametable.index または schema.table.index の形式である必要があります。 名前を変更するオブジェクトが制約の場合、 object_name は schema.constraint の形式である必要があります。

引用符は、修飾オブジェクトを指定する場合のみ必要です。 データベース名を含む完全修飾名を指定する場合、データベース名は現在のデータベースの名前である必要があります。 object_name は nvarchar(776)で、既定値はありません。

[ @newname = ] 新しい名前

指定したオブジェクトの新しい名前。 new_name は 1 部構成の名前である必要があり、識別子の規則に従う必要があります。 @newname は sysname で、既定値はありません。

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

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

  • スキーマ名に / や \ を含めたり、末尾を . にしたりすることはできません。
  • テーブル名に / や \ を含めたり、末尾を . にしたりすることはできません。

[ @objtype = ] 「objtype」

名前を変更するオブジェクトの種類。 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 ステートメントに含める必要があります。 列の名前は、ディストリビューション列でない場合にのみ変更できます。 sp_rename は、ユーザー オブジェクト内の COLUMN の名前を変更するためにのみ使用できます。

適用対象: Microsoft Fabric

  • Microsoft Fabric の Warehouse のsp_renameでは、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. テーブル名の変更

次の例では、SalesTerritory スキーマの SalesTerr テーブルの名前を Sales に変更します。

USE AdventureWorks2022;
GO

EXECUTE sp_rename 'Sales.SalesTerritory', 'SalesTerr';
GO

B. 列の名前変更

次の例では、TerritoryID テーブルのSalesTerritory列の名前を TerrID に変更します。

USE AdventureWorks2022;
GO

EXECUTE sp_rename 'Sales.SalesTerritory.TerritoryID', 'TerrID', 'COLUMN';
GO

C: インデックスの名前を変更する

次の例では、 IX_ProductVendor_VendorID インデックスの名前を IX_VendorID に変更します。

USE AdventureWorks2022;
GO

EXECUTE sp_rename N'Purchasing.ProductVendor.IX_ProductVendor_VendorID', N'IX_VendorID', N'INDEX';
GO

D. 別名データ型の名前を変更する

次の例では、 Phone エイリアス データ型の名前を Telephone に変更します。

USE AdventureWorks2022;
GO

EXECUTE 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.
EXECUTE sp_rename 'HumanResources.PK_Employee_BusinessEntityID', 'PK_EmployeeID';
GO

-- Rename a check constraint.
EXECUTE sp_rename 'HumanResources.CK_Employee_BirthDate', 'CK_BirthDate';
GO

-- Rename a foreign key constraint.
EXECUTE 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という名前の統計オブジェクトを作成し、NewContactを使用して統計の名前をsp_renameに変更します。 統計の名前を変更する場合、オブジェクトは 'schema.table.statistics_name' の形式で指定する必要があります。

CREATE STATISTICS ContactMail1
    ON Person.Person(BusinessEntityID, EmailPromotion)
    WITH SAMPLE 5 PERCENT;

EXECUTE sp_rename 'Person.Person.ContactMail1', 'NewContact', 'Statistics';

例: Azure Synapse Analytics

G. 列の名前変更

次の例では、c1 テーブルのtable1列の名前を col1 に変更します。

Note

この Azure Synapse Analytics 機能は、専用 SQL プールのプレビュー段階にあり、現在、 dbo スキーマ内のオブジェクトでのみ使用できます。

CREATE TABLE table1 (c1 INT, c2 INT);

EXECUTE sp_rename 'table1.c1', 'col1', 'COLUMN';
GO

H. オブジェクトの名前を変更する

次の例では、dbo.table1型を使用して、テーブルdbo.table2の名前をOBJECTに変更します。

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