sp_rename (Transact-SQL)
适用于:SQL Server Azure SQL 数据库 Azure SQL 托管实例 Azure Synapse Analytics Microsoft Fabric 中的 SQL 分析终结点 Microsoft Fabric 中的仓库
在当前数据库中更改用户创建对象的名称。 此对象可以是表、索引、列、别名数据类型或Microsoft
.NET Framework 公共语言运行时 (CLR) 用户定义的类型。
重要
Azure Synapse Analytics 中的无服务器 SQL 池不支持某些系统对象和 Transact-SQL 语法,包括本文。 有关详细信息,请访问 T-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'
sp_rename
Microsoft Fabric 中的语法:
sp_rename [ @objname = ] 'object_name' , [ @newname = ] 'new_name'
[ , [ @objtype = ] 'OBJECT' ]
参数
[ @objname = ] 'object_name'
用户对象或数据类型的当前限定或非限定名称。 如果要重命名的对象是表中的列, object_name 必须位于 form table.column 或 schema.table.column 中。 如果要重命名的对象是索引, object_name 必须位于 form table.index 或 schema.table.index 中。 如果要重命名的对象是约束,object_name必须采用 schema.constraint 格式。
只有在指定了限定对象时才必须使用引号。 如果提供的是完全限定名称(包括数据库名称),则数据库名称必须是当前数据库的名称。 object_name为 nvarchar(776),没有默认值。
[ @newname = ] 'new_name'
指定对象的新名称。 new_name必须是一部分名称,并且必须遵循标识符规则。 newname 为 sysname,无默认值。
触发器名称不能以 #或 ## 开头。
适用于 Microsoft Fabric 中的仓库:
- 架构名称不能包含
/
或\
,或以.
结尾。 - 表单名称不能包含
/
或\
,或以.
结尾。
[ @objtype = ] 'object_type'
要重命名的对象的类型。 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
- 对于
sp_rename
Microsoft Fabric 中的仓库,OBJECT
是@objtype唯一支持的值。 - 对于
sp_rename
Microsoft Fabric 中的 SQL 分析终结点,OBJECT
是@objtype唯一支持的值。 无法重命名表。
返回代码值
0
(成功)或非零数字(失败)。
注解
适用于 SQL Server(所有受支持的版本)和Azure SQL 数据库:
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 数据库和 Azure Synapse Analytics:
重命名表或列等对象不会自动重命名对该对象的引用。 您必须手动修改引用已重命名对象的任何对象。 例如,如果您重命名表列,并且触发器中引用了该列,则必须修改触发器以反映新的列名。 请使用 sys.sql_expression_dependencies 在重命名对象之前列出对象的依赖关系。
重命名列不会自动更新从该表中(使用
*
)选择所有列的任何对象的元数据。 例如,如果重命名表列,并且该列由非架构绑定视图或(使用*
)选择所有列的函数引用,则视图或函数的元数据将继续反映原始列名。 使用 sp_refreshsqlmodule 或 sp_refreshview 刷新元数据。只能更改当前数据库中的对象名称或数据类型名称。 无法更改大多数系统数据类型和系统对象的名称。
如果将超过 128 个字符用于新名称,则仅使用前 128 个字符,其余字符将被截断。
适用于 Azure Synapse Analytics:
- 在 Azure Synapse Analytics 中,
sp_rename
适用于 专用 SQL 池的预览版 。
权限
若要重命名对象、列和索引,则需要对该对象具有 ALTER 权限。 若要重命名用户类型,则需要对该类型具有 CONTROL 权限。 若要重命名数据库,需要 sysadmin 或 dbcreator 固定服务器角色的成员身份。 若要重命名账本表,需要 ALTER LEDGER 权限。
示例
A. 重命名表
下面的示例将 SalesTerritory
架构中的 SalesTerr
表重命名为 Sales
。
USE AdventureWorks2022;
GO
EXEC sp_rename 'Sales.SalesTerritory', 'SalesTerr';
GO
B. 重命名列
以下示例将表中的TerritoryID
SalesTerritory
列重命名为 TerrID
。
USE AdventureWorks2022;
GO
EXEC sp_rename 'Sales.SalesTerritory.TerritoryID', 'TerrID', 'COLUMN';
GO
°C 重命名索引
下面的示例将 IX_ProductVendor_VendorID
索引重命名为 IX_VendorID
。
USE AdventureWorks2022;
GO
EXEC sp_rename N'Purchasing.ProductVendor.IX_ProductVendor_VendorID', N'IX_VendorID', N'INDEX';
GO
D. 重命名别名数据类型
下面的示例将 Phone
别名数据类型重命名为 Telephone
。
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
个名为统计信息的对象,然后使用 将统计信息重命名为 NewContact
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
table1
列重命名为 col1
。
注意
此 Azure Synapse Analytics 功能仍处于专用 SQL 池预览状态,目前仅适用于架构中的 dbo
对象。
CREATE TABLE table1 (c1 INT, c2 INT);
EXEC sp_rename 'table1.c1', 'col1', 'COLUMN';
GO
H. 重命名对象
以下示例使用类型将表dbo.table1
重命名为dbo.table2
<
EXEC sp_rename @objname = 'dbo.table1', @newname = 'table2', @objtype = 'OBJECT';