Я унаследовал обслуживание SQL Server (2008), и я хочу изменить некоторые системные хранимые процедуры. Это пользовательские системные хранимые процедуры (например: sys.sp_customproc). Я могу только предположить, что они были созданы как системные процедуры, чтобы их можно было разделить на несколько баз данных? Но независимо от того, мне нужно их модифицировать.SQL Server 2008 изменить системную хранимую процедуру
Приведен пример одного из них.
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') <> 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 <> 4) or (@freq_interval <> 1) or (@freq_subday_type <> 4)
begin
raiserror(32037, 16, 1)
return 1
end
select @freq_subday_interval update_period
return 0
end
Когда я пытаюсь выполнить его, я получаю сообщение об ошибке:
Msg 208, уровень 16, состояние 6, процедура sp_dbmmonitorhelpmonitoring, строка 46 Неверное имя объекта 'sys.sp_dbmmonitorhelpmonitoring'.
Мой логин - это «sa», я сопоставлен с пользовательским «dbo» в базе данных [msdb]. Как изменить эту хранимую процедуру?
Ну, это просто: в базе данных нет хранимой процедуры с именем 'sys.sp_dbmmonitorhelpmonitoring' в базе данных, где вы ее выполняете. – phadaphunk