У нас есть задание агента SQL Server (выполняет хранимую процедуру), которое запускается каждый день и добавляет новые базы данных в наши задания на обслуживание. Я хотел бы создать новую хранимую процедуру, которая удалит все шаги задания из заданий обслуживания для тех баз данных, которые были удалены.
Ниже приведено то, что у меня есть в данный момент, но при выполнении оно удалит только все остальныезапись. Я уверен, что делаю что-то глупое, но я не могу понять, как это исправить.
DECLARE @dblist TABLE (id int identity (1,1) PRIMARY KEY CLUSTERED,
dbname nvarchar(128),
job_id uniqueidentifier,
step_id int);
DECLARE @dbname nvarchar(128);
DECLARE @stepid int;
DECLARE @jobid uniqueidentifier;
DECLARE @jobname2 sysname;
INSERT INTO @dblist (dbname, job_id, step_id)
SELECT database_name as dbname,
js.job_id,
js.step_id
from msdb..sysjobsteps as js
INNER JOIN msdb..sysjobs as j ON js.job_id = j.job_id
WHERE database_name NOT IN ('master', 'msdb', 'model','tempdb', 'MET', 'default_db')
AND database_name NOT IN (SELECT sdb.name
FROM sys.sysdatabases as sdb
INNER JOIN msdb..sysjobs AS j ON js.job_id = j.job_id
WHERE sdb.name = js.database_name );
DECLARE cur CURSOR FOR
SELECT job_id,
step_id
FROM @dblist;
OPEN cur
FETCH NEXT FROM cur INTO @jobid, @stepid;
WHILE @@FETCH_STATUS = 0
BEGIN
EXEC msdb..sp_delete_jobstep @job_id = @jobid, @step_id = @stepid;
FETCH NEXT FROM cur INTO @jobid, @stepid;
IF @@FETCH_STATUS <> 0
BREAK;
END
CLOSE cur;
DEALLOCATE cur;