• The "best method" depends on how you want to do it.  Assuming you want to do it via T-SQL, then maybe something like below (I've omitted any error/missing object checking):

    DECLARE @current_proc_name nvarchar(100);

    DECLARE @new_proc_name nvarchar(100);

    DECLARE @proc_source nvarchar(max);

    SET @current_proc_name = 'proc1';

    SET @new_proc_name = 'proc1_new';

    SELECT @proc_source = OBJECT_DEFINITION(OBJECT_ID(@current_proc_name));

    SET @proc_source = STUFF(@proc_source, CHARINDEX(@current_proc_name, @proc_source), LEN(@current_proc_name), @new_proc_name);

    IF CHARINDEX('ALTER', @proc_source) > 0 AND

    CHARINDEX('ALTER', @proc_source) < CHARINDEX('SOURCE', @proc_source)

    BEGIN

    SET @proc_source = STUFF(@proc_source, CHARINDEX('ALTER', @proc_source), 5, 'CREATE')

    END /*IF*/

    SELECT @proc_source;

    EXEC(@proc_source);

    SQL DBA,SQL Server MVP(07, 08, 09) A socialist is someone who will give you the shirt off *someone else's* back.