sp_rename (Transact-SQL)

适用于: 是SQL Server(所有支持的版本) 是Azure SQL 数据库 是Azure Synapse Analytics

在当前数据库中更改用户创建对象的名称。 此对象可以是表、索引、列、别名数据类型或公共语言运行时 (Microsoft .NET Framework CLR) 用户定义类型。

备注

在 中,sp_rename专用池SQL预览版,只能用于 Azure Synapse Analytics 重命名用户对象中的COLUMN。

注意

更改对象名的任一部分都可能破坏脚本和存储过程。 我们建议您不要使用此语句来重命名存储过程、触发器、用户定义函数或视图;而是删除该对象,然后使用新名称重新创建该对象。

主题链接图标 Transact-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_name表.column 或 schema.table.column 格式。 如果要重命名的对象是索引,则object_name表.index或 schema.table.index 格式。 如果要重命名的对象是约束,object_name 格式为 schema.constraint

只有在指定了限定对象时才必须使用引号。 如果提供的是完全限定名称(包括数据库名称),则数据库名称必须是当前数据库的名称。 object_namenvarchar (776),无默认值。

[ @newname = ] 'new_name'
指定对象的新名称。 new_name 必须是一部分名称,并且必须遵循标识符规则。 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 数据库。

由用户显式创建的统计信息或使用索引隐式创建的统计信息。 重命名索引的统计信息时,也会自动重命名索引。
USERDATATYPE 通过执行 CREATE TYPE或 命令添加的CLR用户定义sp_addtype。

[ @objtype = ] 'COLUMN' 适用于: Azure Synapse Analytics
在 sp_rename (预览) 中,COLUMN 是一个必需的参数,用于指定要重命名的对象类型 Azure Synapse Analytics 是列。 它是没有默认值 的 varchar (13) ,必须始终包含在 sp_rename (预览) 语句中。 只有在列为非分布列时,才能重命名该列。

返回代码值

0(成功)或非零数字(失败)

备注

适用于SQL Server ( 版本和) Azure SQL 数据库
每当重命名 PRIMARY KEY 或 UNIQUE 约束时,sp_rename 都会自动重命名关联的索引。 如果重命名的索引与 PRIMARY KEY 约束关联,则 sp_rename 也会自动重命名该 PRIMARY KEY 约束。

适用于SQL Server ( 版本和) Azure SQL 数据库
sp_rename 可用于重命名主要和次要的 XML 索引。

适用于SQL Server ( 版本和) Azure SQL 数据库
重命名存储过程、函数、视图或触发器不会更改 sys.sql_modules 目录视图的定义列中或通过使用 OBJECT_DEFINITION 内置函数 获取的相应对象 的名称。 因此,我们建议不要使用 sp_rename 重命名这些对象类型。 而是删除对象,然后使用新名称重新创建该对象。

适用于SQL Server ( 支持的所有) 、Azure SQL 数据库和Azure Synapse Analytics
重命名表或列等对象将不会自动重命名对该对象的引用。 您必须手动修改引用已重命名对象的任何对象。 例如,如果您重命名表列,并且触发器中引用了该列,则必须修改触发器以反映新的列名。 请使用 sys.sql_expression_dependencies 在重命名对象之前列出对象的依赖关系。

适用于SQL Server ( 支持的所有) 、Azure SQL 数据库和Azure Synapse Analytics
只能更改当前数据库中的对象名称或数据类型名称。 大多数系统数据类型和系统对象的名称都不能更改。

权限

若要重命名对象、列和索引,则需要对该对象具有 ALTER 权限。 若要重命名用户类型,则需要对该类型具有 CONTROL 权限。 若要重命名数据库,则需要具备 sysadmin 或 dbcreator 固定服务器角色的成员身份

示例

A. 重命名表

下面的示例将 SalesTerritory 架构中的 SalesTerr 表重命名为 Sales

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

B. 重命名列

以下示例将 表中的 TerritoryIDSalesTerritory 重命名为 TerrID

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. 重命名别名数据类型

下面的示例将 Phone 别名数据类型重命名为 Telephone

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. 重命名列

以下示例将 表中的 c1table1 重命名为 col1

备注

此功能 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 SQL)