SQL Serverエージェントジョブ-存在してからドロップしますか?
-
02-07-2019 - |
質問
SQLサーバーエージェントジョブが存在する場合、それを削除するにはどうすればよいですか?
これは、ストアドプロシージャ用の機能性の高いスクリプトです。 SQLサーバーエージェントジョブに対して同じことを行うにはどうすればよいですか?
if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[storedproc]') and OBJECTPROPERTY(id, N'IsProcedure') = 1)
drop procedure [dbo].[storedproc]
GO
CREATE PROCEDURE [dbo].[storedproc] ...
解決
次のようなものを試してください:
DECLARE @jobId binary(16)
SELECT @jobId = job_id FROM msdb.dbo.sysjobs WHERE (name = N'Name of Your Job')
IF (@jobId IS NOT NULL)
BEGIN
EXEC msdb.dbo.sp_delete_job @jobId
END
DECLARE @ReturnCode int
EXEC @ReturnCode = msdb.dbo.sp_add_job @job_name=N'Name of Your Job'
'sp_add_job'に必要なすべてのパラメーターに関するドキュメントを読むのが最適ですおよび 'sp_delete_job'
他のヒント
IF EXISTS (SELECT job_id
FROM msdb.dbo.sysjobs_view
WHERE name = N'Your Job Name')
EXEC msdb.dbo.sp_delete_job @job_name=N'Your Job Name'
, @delete_unused_schedule=1
ジョブ(エンタープライズマネージャーでテスト済み)のSQLスクリプトを生成すると、存在の確認とドロップステートメントが自動的に作成されます。以下の例:-
DECLARE @JobID BINARY(16)
DECLARE @ReturnCode INT
SELECT @ReturnCode = 0
-- Delete the job with the same name (if it exists)
SELECT @JobID = job_id
FROM msdb.dbo.sysjobs
WHERE (name = N'My test job')
IF (@JobID IS NOT NULL)
BEGIN
-- Check if the job is a multi-server job
IF (EXISTS (SELECT *
FROM msdb.dbo.sysjobservers
WHERE (job_id = @JobID) AND (server_id <> 0)))
BEGIN
-- There is, so abort the script
RAISERROR (N'Unable to import job ''My test job'' since there is already a multi-server job with this name.', 16, 1)
END
ELSE
-- Delete the [local] job
EXECUTE msdb.dbo.sp_delete_job @job_name = N'My test job'
SELECT @JobID = NULL
END
所属していません StackOverflow