系统存储过程 sp_rename
procedure [sys].[sp_rename]
@objname nvarchar(1035), – up to 4-part “old” name
@newname sysname, – one-part new name
@objtype varchar(13) = null – identifying the name
参数说明
@objtype 值列表
‘column’(列),
‘database’(数据库),
‘index’(索引),
‘object’ (在 sysobjects 中跟踪的类型的项目。例如,OBJECT 可用来重命名约束(CHECK、FOREIGN KEY、PRIMARY/UNIQUE KEY)、用户表、视图、存储过程、触发器和规则等对象),
‘userdatatype’通过执行 sp_addtype 而添加的用户定义数据类型。
返回值
0 (成功) 、非0(失败)
注意:
每当重命名 PRIMARY KEY 或 UNIQUE 约束时,sp_rename 都会自动为相关联的索引重命名。如果重命名的索引与 PRIMARY KEY 约束相关联,那么 sp_rename 也会自动重命名主键。
重命名视图时,sysobjects 表中有关该视图的信息将得到更新。重命名存储过程时,sysobjects 表中有关该过程的信息将得到更新。
重要 重命名存储过程和视图后,请清空过程高速缓存以确保所有相关的存储过程和视图都重新编译。
由于存储过程和视图都不存储数据,所以这两种对象均可快速删除和重建。重命名文本对象时,要获得最佳结果,应删除并使用其新名称重新创建对象。
权限
sysadmin 固定服务器角色成员、db_owner 和 db_ddladmin 固定数据库角色成员或对象所有者可以执行 sp_rename。只有 sysadmin 和 dbcreator 固定服务器角色成员才能将”database”作为 object_type 来执行 sp_rename。
实例:
A. 重命名表
下例将表 customers 重命名为 custs。
EXEC sp_rename ‘customers’, ‘custs’
B. 重命名列
下例将表 customers 中的列col1 重命名为 title。
EXEC sp_rename ‘customers.[col1]’, ‘title’, ‘COLUMN’
C.重命名数据库名:
EXEC sp_renamedb ‘Old_name’,’New_name’;
D.批量更新相似表名称,(需要注意的是 执行sp_rename之后 相对应的游标查询的视图会自动重新生成)
DECLARE @tbl varchar(100),@new varchar(100)
DECLARE cur CURSOR FAST_FORWARD READ_ONLY FOR
SELECT name FROM sys.objects WHERE name LIKE ‘lsgprs%’ AND TYPE=’u’
OPEN cur
FETCH NEXT FROM cur INTO @tbl
WHILE @@FETCH_STATUS = 0
BEGIN
SET @new = ‘bak’ + @tbl
PRINT @new
EXEC sp_rename @tbl, @new
FETCH NEXT FROM cur INTO @tbl
END
CLOSE cur
DEALLOCATE cur