SQL Server 2008 R2を使用しており、msdbデータベースからいくつかのプロパティを取得する必要があります。
Job properties -> Notifications
ページにある情報を取得するためのクエリが必要です。
この情報はどの表にありますか?
詳細は、dbo.sysjobsビューとdbo.sysoperatorsビューで確認できます。いくつかの単純なコード(最初の投稿のコーディングエラーからクリーンアップされました。):
SELECT j.name AS JobName,
j.notify_level_email, e.name AS EmailOperator,
j.notify_level_netsend, n.name AS NetSendOperator,
j.notify_level_page, p.name AS PagerOperator,
j.notify_level_eventlog,
j.delete_level
FROM dbo.sysjobs j
LEFT JOIN dbo.sysoperators e
on j.notify_email_operator_id = e.id
LEFT JOIN dbo.sysoperators n
on j.notify_netsend_operator_id = n.id
LEFT JOIN dbo.sysoperators p
on j.notify_page_operator_id = p.id
通知レベルを具体化しなかった:0 =なし、1 =成功、2 =失敗、3 =完了。どのような状況でもジョブが自動的に削除されない場合、delete_levelは0です。
情報はmsdb
に格納されているため、最初に[ジョブのプロパティ]ウィンドウを開いたときに情報の一部が取得され、[通知]ページをクリックすると、さらに情報が照会されます。 SSMSはsp_help_
ストアドプロシージャでINSERT
/EXEC
を使用してオペレーター情報を取得します。これはかなり扱いにくいものです...残念ながら、この場合はプロファイラーを使用してクエリをトラップします特に役に立ちません。
以下は、ページからすべての情報を一度に返す完成したクエリです。
USE [msdb];
GO
WITH jobStates AS
(
SELECT 0 AS Level, 'Disabled' AS Description UNION ALL
SELECT 1, 'On Success' UNION ALL
SELECT 2, 'On Failure' UNION ALL
SELECT 3, 'On Completion'
)
SELECT
j.job_id,
j.name,
es.Description AS EmailOnJobState, e.name AS EmailOperatorName, e.email_address AS EmailOperatorEmailAddress,
ps.Description AS PageOnJobState, p.name AS PageOperatorName, p.pager_address AS PageOperatorPagerAddress,
nss.Description AS NetSendOnJobState, ns.name AS NetSendOperatorName, ns.netsend_address AS NetSendOperatorNetSendAddress,
els.Description AS EventLogOnJobState,
ds.Description AS DeleteJobOnJobState
FROM [dbo].[sysjobs] j
INNER JOIN jobStates es ON es.Level = j.notify_level_email
INNER JOIN jobStates ps ON ps.Level = j.notify_level_page
INNER JOIN jobStates nss ON nss.Level = j.notify_level_netsend
INNER JOIN jobStates els ON els.Level = j.notify_level_eventlog
INNER JOIN jobStates ds ON ds.Level = j.delete_level
LEFT OUTER JOIN [dbo].[sysoperators] e ON (j.notify_level_email > 0) AND (e.id = j.notify_email_operator_id)
LEFT OUTER JOIN [dbo].[sysoperators] p ON (j.notify_level_page > 0) AND (p.id = j.notify_page_operator_id)
LEFT OUTER JOIN [dbo].[sysoperators] ns ON (j.notify_level_netsend > 0) AND (ns.id = j.notify_netsend_operator_id);
何を探しているのか本当にわかりませんが、sp_help_jobまたはsp_helpjobstepを試しましたか?
USE msdb;
GO
EXEC dbo.sp_help_jobstep
@job_name = N'JobName_Here',
@step_id = 1;
GO