如何使用新名称创建SQL Server存储过程或视图的副本?

时间:2011-08-23 16:39:48

标签: sql-server sql-server-2005 replication database-replication

假设我有一个存储过程proc_MyTestProc。

我想创建一个名为proc_MyTestProc_ {timestamp}的proc的备份副本,并在其位置创建此proc的新实例。这是我目前的方法:

  1. 在proc_MyTestProc上运行sp_rename,附加时间戳。
  2. 为新版本的proc_MyTestProc运行新的CREATE脚本。
  3. 此方法的问题在于它无法与复制一起使用。原始过程保留相同的对象ID。在步骤#2中创建的过程是我想要复制到另一个DB的过程,但它有一个新的对象ID,因此它不会复制。

    是否有SP_RENAME的替代方法可以使用新的对象ID创建对象的副本?

    我正在运行SQL Server 2005。

1 个答案:

答案 0 :(得分:0)

DECLARE @old VARCHAR(255),
        @new VARCHAR(255),
        @sql NVARCHAR(MAX),
        @myid UNIQUEIDENTIFIER

SET @myid = NEWID();


SELECT @old = 'invoice_validation_sp', @new = @old + CONVERT(VARCHAR(20),GETDATE(), 112)

SELECT @sql = REPLACE(OBJECT_DEFINITION(OBJECT_ID),@old, @new) 
FROM sys.procedures 
WHERE name = @old

EXECUTE sp_executesql @sql

你可以随时做这样的事情......