重命名数据库存储过程/函数/视图/触发器应注意的问题(二)
_1 nvarchar(4000),
12.@_msparam_2 nvarchar(4000),@_msparam_3 nvarchar(4000),@_msparam_4 nvarchar(4000)',
13.@_msparam_0=N'P',@_msparam_1=N'RF',@_msparam_2=N'PC',
14.@_msparam_3=N'NewTestProc',@_msparam_4=N'dbo'
15.
16./*
17.Definition
18.-------------------------------
19.CREATE PROCEDURE TestProc
20.AS
21.SELECT 'Hello'
22.*/
,修改
可以看到SSMS找到相同的定义(旧的名称),但是management studio很智能修改了定义呈现给我们,还有一点有意思的是,在SSMS中保存ALTER PROCEDURE的脚本后,对象的名称得到了更新
01.USE [xmlworkshop]
02.GO
03./****** Object: StoredProcedure [dbo].[NewTestProc]
04.Script Date: 09/28/2008 11:56:31 ******/
05.SET ANSI_NULLS ON
06.GO
07.SET QUOTED_IDENTIFIER ON
08.GO
09.ALTER PROCEDURE [dbo].[NewTestProc]
10.AS
11.SELECT 'Hello'
执行上述更新代码,再次执行sp_helptext时就会获得新的对象定义。
1.sp_helptext NewTestProc
2./*
3.Text
4.---------------------------------------
5.CREATE PROCEDURE [dbo].[NewTestProc]
6.AS
7.SELECT 'Hello'
8.*/
可以看到执行的更新脚本后,存储过程的名称在对象定义中也得到更新。 因此,不推荐去重命名存储过程,视图,触发器等对象。如果我想需要改名的话,把原先的删掉再重新创建。如果这个对象已经被复制了,是不允许删除重建的,否者会遇到下列错误
1.Msg 3724, Level 16, State 2, Line 1
2.Cannot drop the procedure 'NewTestProc' because it is being used for replication.
遇到这种情况,可以采用如下两种办法
1从文章中删除该对象,创建它并将其重新添加到复制文章列表。
2 使用sp_rename重命名对象。重命名对象后,从Management Studio中生成ALTER脚本并执行它,以确保过程,触发器,函数,视图等对象的名称正确更新
总结
1 避免重命名对象。
2 如果你想重命名对象,删除该对象,然后重新创建。
3.不要使用sp_helptext检索对象的定义和修改。
4. 只有当对象未被复制时,使用SP_RENAME重命名对象。在这种情况下,你重命名对象后,生成ALTER脚本从SSMS执行一次,以确保对象名称正确更新的对象体。