sp_rename (Transact-SQL)

適用対象:SQL ServerAzure SQL DatabaseAzure Synapse Analytics

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

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

Note

Azure Synapse Analytics では、 sp_rename は専用 SQL プールのプレビュー段階にあり、ユーザー オブジェクトの COLUMN の名前を変更するためにのみ使用できます。

重要

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

注意事項

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

Transact-SQL 構文表記規則

構文

sp_rename SQL Server および Azure SQL データベースの の構文:

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'

引数

[ @objname = ] 'object_name'

ユーザー オブジェクトまたはデータ型の現在の修飾名または非修飾名。 名前を変更するオブジェクトがテーブル内の列である場合、object_nametable.column または schema.table.column の形式である必要があります。 名前を変更するオブジェクトがインデックスの場合、object_nameは table.index または schema.table.index の形式である必要があります。 名前を変更するオブジェクトが制約の場合、 object_nameschema.constraint という形式である必要があります。

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

[ @newname = ] 'new_name'

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

Note

トリガー名の先頭に # または ## は使用できません。

[ @objtype = ] 'object_type'

名前を変更するオブジェクトの種類。 object_typevarchar(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 ユーザー定義型

[ @objtype = ] 'COLUMN'

適用対象:Azure Synapse Analytics

Azure Synapse Analytics の (プレビュー) ではsp_renameCOLUMN は名前を変更するオブジェクトの種類が列であることを指定する必須パラメーターです。 これは 既定値のない varchar(13) であり、常に (プレビュー) ステートメントに sp_rename 含まれている必要があります。 列の名前は、ディストリビューション列でない場合にのみ変更できます。

リターン コードの値

0 (成功) または 0 以外の数値 (失敗)

注釈

SQL Server (サポートされているすべてのバージョン) と Azure SQL Database に適用されます

  • sp_rename は、PRIMARY KEY 制約または UNIQUE 制約の名前が変更されるたびに、関連付けられているインデックスの名前を自動的に変更します。 名前が変更されたインデックスが PRIMARY KEY 制約に関連付けられている場合、PRIMARY KEY 制約の名前も によって sp_rename自動的に変更されます。

  • sp_rename を使用して、プライマリとセカンダリの 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 文字のみが使用され、残りの文字は切り捨てられます。

アクセス許可

オブジェクト、列、インデックスの名前を変更するには、 オブジェクトに対する ALTER 権限が必要です。 ユーザー定義型の名前を変更するには、その型に対する CONTROL 権限が必要です。 データベースの名前を変更するには、sysadmin 固定サーバー ロールまたは dbcreator 固定サーバー ロールのメンバーシップが必要です。 台帳テーブルの名前を変更するには、ALTER LEDGER 権限が必要です。

A. テーブル名の変更

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

USE AdventureWorks2022;
GO
EXEC sp_rename 'Sales.SalesTerritory', 'SalesTerr';
GO

B. 列の名前変更

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

USE AdventureWorks2022;
GO
EXEC sp_rename 'Sales.SalesTerritory.TerritoryID', 'TerrID', 'COLUMN';
GO

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

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

USE AdventureWorks2022;
GO
EXEC sp_rename N'Purchasing.ProductVendor.IX_ProductVendor_VendorID', N'IX_VendorID', N'INDEX';
GO

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

次の例では、別名データ型の名前を PhoneTelephone変更します。

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. 列の名前変更

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

Note

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

CREATE TABLE table1 (c1 INT, c2 INT);
EXEC sp_rename 'table1.c1', 'col1', 'COLUMN';
GO

関連項目