sp_rename (Transact-SQL)

適用対象:yesAzure Synapse Analytics Azure SQL Database SQL Server yes(サポートされているすべてのバージョン) Yes

現在のデータベース内のユーザー作成オブジェクトの名前を変更します。 このオブジェクトには、テーブル、インデックス、列、別名データ型、または Microsoft .NET Framework共通言語ランタイム (CLR) ユーザー定義型を指定できます。

注意

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

注意事項

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

Topic link iconTransact-SQL 構文表記規則

構文

-- Transact-SQL Syntax for sp_rename in SQL Server and Azure SQL Database
sp_rename [ @objname = ] 'object_name' , [ @newname = ] 'new_name'   
    [ , [ @objtype = ] 'object_type' ]   
-- Transact-SQL Syntax for sp_rename (preview) in 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 で、既定値はありません。

注意

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

[ @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 Database。

ユーザーが明示的に作成した統計、またはインデックスを使用して暗黙的に作成された統計。 インデックスの統計の名前を変更すると、インデックスの名前も自動的に変更されます。
USERDATATYPE CREATE TYPE または sp_addtypeを実行して追加された CLR ユーザー定義型

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

リターン コードの値

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

Remarks

SQL Server (サポートされているすべてのバージョン) とAzure SQL Databaseに適用されます
sp_rename では、PRIMARY KEY (主キー) または UNIQUE (一意) 制約の名前を変更した場合、関連するインデックスの名前も自動的に変更されます。 名前が変更されたインデックスが PRIMARY KEY 制約に関連付けられている場合、PRIMARY KEY 制約もsp_renameによって自動的に名前が変更されます。

SQL Server (サポートされているすべてのバージョン) とAzure SQL Databaseに適用されます
sp_rename は、プライマリおよびセカンダリ XML インデックスの名前を変更する場合に使用できます。

SQL Server (サポートされているすべてのバージョン) とAzure SQL Databaseに適用されます
ストアド プロシージャ、関数、ビュー、またはトリガーの名前を変更しても、対応するオブジェクトの名前は、 sys.sql_modules カタログ ビューの定義列に変更されず、 OBJECT_DEFINITION 組み込み関数を使用して取得されます。 したがって、これらのオブジェクトの種類の名前を変更する場合は、sp_rename を使用しないことをお勧めします。 代わりに、オブジェクトを削除して新しい名前で再作成してください。

SQL Server (サポートされているすべてのバージョン)、Azure SQL Database、Azure Synapse Analytics に適用されます
テーブルや列などのオブジェクトの名前を変更すると、そのオブジェクトへの参照の名前は自動的に変更されません。 名前が変更されたオブジェクトを参照するすべてのオブジェクトを手動で変更する必要があります。 たとえば、テーブルの列の名前を変更するとき、その列がトリガーで参照されている場合は、新しい列名が反映されるようにトリガーに変更を加える必要があります。 オブジェクトの名前を変更する前には、 sys.sql_expression_dependencies を使ってオブジェクトの従属関係を一覧表示できます。

SQL Server (サポートされているすべてのバージョン)、Azure SQL Database、Azure Synapse Analytics に適用されます
現在のデータベース内のオブジェクトまたはデータ型の名前のみを変更できます。 ほとんどのシステム・データ・タイプおよびシステム・オブジェクトの名前は変更できません。

アクセス許可

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

A. テーブルの名前を変更する

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

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

B. 列の名前を変更する

次の例では、テーブルTerrID内の列のTerritoryID名前を SalesTerritory .

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

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

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

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

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

次の例では、別名データ型Telephoneの名前を Phone .

USE AdventureWorks2012;  
GO  
EXEC sp_rename N'Phone', N'Telephone', N'USERDATATYPE';  
GO  

E. 制約の名前変更

次の例では、PRIMARY KEY 制約、CHECK 制約、および FOREIGN KEY 制約の名前を変更します。 制約の名前を変更する際は、制約が属するスキーマを指定する必要があります。

USE AdventureWorks2012;   
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.  
sp_rename 'HumanResources.PK_Employee_BusinessEntityID', 'PK_EmployeeID';  
GO  
  
-- Rename a check constraint.  
sp_rename 'HumanResources.CK_Employee_BirthDate', 'CK_BirthDate';  
GO  
  
-- Rename a foreign key constraint.  
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');  
  
  
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;  
  
sp_rename 'Person.Person.ContactMail1', 'NewContact','Statistics';  
  

例 :Azure Synapse Analytics

G. 列の名前を変更する

次の例では、テーブルcol1内の列のc1名前を table1 .

注意

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

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

参照

sys.sql_expression_dependencies (Transact-SQL)
sys.sql_modules (Transact-SQL)
システム ストアド プロシージャ (Transact-SQL)
ストアド プロシージャのデータベース エンジン (Transact-SQL)