title: SQL Server 2008 modify system stored procedure
body: <p>I have inherited maintenance of a SQL Server (2008), and I want to modify some of the system stored procedures. These are user-defined system stored procedures (for example: sys.sp_customproc). I can only assume they were created as system procedures so they could be shared across multiple databases? But regardless, I need to modify them.</p>
  
  <p>Here is an example of one of them.</p>
  
  <pre><code>USE [msdb]
  GO
  /****** Object:  StoredProcedure [sys].[sp_dbmmonitorhelpmonitoring]    Script Date: 06/12/2013 13:16:52 ******/
  SET ANSI_NULLS ON
  GO
  SET QUOTED_IDENTIFIER ON
  GO
  ALTER procedure [sys].[sp_dbmmonitorhelpmonitoring] 
  as
  begin
  set nocount on
  if (is_srvrolemember(N'sysadmin') &lt;&gt; 1 )
      begin
          raiserror(21089, 16, 1)
          return (1)
      end
  
  declare @freq_type              int,    -- 4 = daily
          @freq_interval          int,    -- Every 1 days 
          @freq_subday_type       int,    -- 4 = based on Minutes
          @freq_subday_interval   int,    -- interval
          @job_id                 uniqueidentifier,
          @schedule_id            int,
          @retention_period       int,
          @jobname                nvarchar( 256 )
  
  select @jobname   = isnull( formatmessage( 32047 ), N'Database Mirroring Monitor Job' )
  
  select @job_id = job_id from msdb.dbo.sysjobs where name = @jobname
  if (@job_id is null)    -- if the job does not exist, error out
  begin
      raiserror( 32049, 16, 1 )
      return 1 
  end
  
  select @schedule_id = schedule_id from msdb.dbo.sysjobschedules where job_id = @job_id
  select  @freq_type = freq_type,
          @freq_interval = freq_interval, 
          @freq_subday_type = freq_subday_type,
          @freq_subday_interval = freq_subday_interval
      from msdb.dbo.sysschedules where schedule_id = @schedule_id
  
  -- If the frequency parameters are not what we expect then return an error
  -- Someone has changed the job schedule on us
  if (@freq_type &lt;&gt; 4) or (@freq_interval &lt;&gt; 1) or (@freq_subday_type &lt;&gt; 4)
  begin
      raiserror( 32037, 16, 1)
      return 1
  end
  
  select @freq_subday_interval update_period
  
  return 0
  end
  </code></pre>
  
  <p>When I try to execute it, I get the error:</p>
  
  <p>Msg 208, Level 16, State 6, Procedure sp_dbmmonitorhelpmonitoring, Line 46
  Invalid object name 'sys.sp_dbmmonitorhelpmonitoring'.</p>
  
  <p>My login is 'sa', I am mapped to the user 'dbo' in the [msdb] database. How do I modify this stored procedure?</p>