重命名以特定前缀开头的存储过程

时间:2013-08-13 10:54:27

标签: sql sql-server-2008-r2

我有大量需要重命名的存储过程。幸运的是,它们都以相同的前缀开头,例如spPortalxxxxxx

我需要重命名它们,例如v11_spPortalxxxxxx

无论如何都要一次性重命名所有存储过程而不是手动完成每个存储过程吗?

2 个答案:

答案 0 :(得分:2)

您可以做的是通过Sql查询创建重命名语句。然后将查询结果复制并粘贴到新查询窗口以执行

select 

'sp_rename ''' +[Routine_Name]+''','''+'v11_'+[Routine_Name]+''''

FROM [INFORMATION_SCHEMA].[ROUTINES]
WHERE [ROUTINE_TYPE] = 'PROCEDURE'
and [Routine_Name] like 'spPortal%'

答案 1 :(得分:0)

您可能会被SP_Rename诱惑,但这可能是最糟糕的事情,因为它不会更新sys.procedures请参阅this

我能想到的一种方法是创建一个查询,删除旧的查询并使用新名称重新创建它们。

SELECT 'drop procedure ' + OBJECT_NAME(OBJECT_ID) + ';
go
' + 
REPLACE (OBJECT_DEFINITION(OBJECT_ID), 'spPortal', 'v11_spPortal') + '
go
'
FROM sys.procedures

此查询还将更新定义内的任何调用...

我认为您要为版本添加此项,如果是这样,您需要添加WHERE OBJECT_NAME(OBJECT_ID) LIKE 'spPortal%'

不要忘记,您需要根据需要应用GRANT