2013-08-07 7 views
8

Ich bin in SQL 2008/R2. Ich möchte eine Abfrage ausführen, um festzustellen, ob ein SQL-Agent-Job einen angegebenen gespeicherten Prozess aufruft (es gibt zu viele, die manuell überprüft werden können).Wie finden Sie alle SQL-Agent-Jobs, die einen bestimmten gespeicherten Prozess aufrufen

+0

Seite haben alle http: //www.mssqltips. com/sqlservertip/2561/querying-sql-server-agenten-job-information/ –

+0

Installieren Sie das RedGate SQL-Suchtool in SSMS. Es ist kostenlos und macht viele Dinge zum Kinderspiel. –

Antwort

10

Hier ist eine Abfrage, die Sie das und mehr (Blick auf die WHERE-Klausel für die gespeicherte Prozedur Name) geben:

SELECT 
    [sJOB].[job_id] AS [JobID] 
    , [sJOB].[name] AS [JobName] 
    , [sJSTP].[step_uid] AS [StepID] 
    , [sJSTP].[step_id] AS [StepNo] 
    , [sJSTP].[step_name] AS [StepName] 
    , CASE [sJSTP].[subsystem] 
     WHEN 'ActiveScripting' THEN 'ActiveX Script' 
     WHEN 'CmdExec' THEN 'Operating system (CmdExec)' 
     WHEN 'PowerShell' THEN 'PowerShell' 
     WHEN 'Distribution' THEN 'Replication Distributor' 
     WHEN 'Merge' THEN 'Replication Merge' 
     WHEN 'QueueReader' THEN 'Replication Queue Reader' 
     WHEN 'Snapshot' THEN 'Replication Snapshot' 
     WHEN 'LogReader' THEN 'Replication Transaction-Log Reader' 
     WHEN 'ANALYSISCOMMAND' THEN 'SQL Server Analysis Services Command' 
     WHEN 'ANALYSISQUERY' THEN 'SQL Server Analysis Services Query' 
     WHEN 'SSIS' THEN 'SQL Server Integration Services Package' 
     WHEN 'TSQL' THEN 'Transact-SQL script (T-SQL)' 
     ELSE sJSTP.subsystem 
     END AS [StepType] 
    , [sPROX].[name] AS [RunAs] 
    , [sJSTP].[database_name] AS [Database] 
    , [sJSTP].[command] AS [ExecutableCommand] 
    , CASE [sJSTP].[on_success_action] 
     WHEN 1 THEN 'Quit the job reporting success' 
     WHEN 2 THEN 'Quit the job reporting failure' 
     WHEN 3 THEN 'Go to the next step' 
     WHEN 4 THEN 'Go to Step: ' 
        + QUOTENAME(CAST([sJSTP].[on_success_step_id] AS VARCHAR(3))) 
        + ' ' 
        + [sOSSTP].[step_name] 
     END AS [OnSuccessAction] 
    , [sJSTP].[retry_attempts] AS [RetryAttempts] 
    , [sJSTP].[retry_interval] AS [RetryInterval (Minutes)] 
    , CASE [sJSTP].[on_fail_action] 
     WHEN 1 THEN 'Quit the job reporting success' 
     WHEN 2 THEN 'Quit the job reporting failure' 
     WHEN 3 THEN 'Go to the next step' 
     WHEN 4 THEN 'Go to Step: ' 
        + QUOTENAME(CAST([sJSTP].[on_fail_step_id] AS VARCHAR(3))) 
        + ' ' 
        + [sOFSTP].[step_name] 
     END AS [OnFailureAction] 
FROM 
    [msdb].[dbo].[sysjobsteps] AS [sJSTP] 
    INNER JOIN [msdb].[dbo].[sysjobs] AS [sJOB] 
     ON [sJSTP].[job_id] = [sJOB].[job_id] 
    LEFT JOIN [msdb].[dbo].[sysjobsteps] AS [sOSSTP] 
     ON [sJSTP].[job_id] = [sOSSTP].[job_id] 
     AND [sJSTP].[on_success_step_id] = [sOSSTP].[step_id] 
    LEFT JOIN [msdb].[dbo].[sysjobsteps] AS [sOFSTP] 
     ON [sJSTP].[job_id] = [sOFSTP].[job_id] 
     AND [sJSTP].[on_fail_step_id] = [sOFSTP].[step_id] 
    LEFT JOIN [msdb].[dbo].[sysproxies] AS [sPROX] 
     ON [sJSTP].[proxy_id] = [sPROX].[proxy_id] 
WHERE [sJSTP].[command] LIKE '%MyStoredProc%' 
ORDER BY [JobName], [StepNo] 

Kredit zu dem Artikel für die meisten der oben Querying SQL Server Agent Job Information von dattatreya Sindol gehen Abfrage.

+0

Es hat funktioniert, danke! Ich mag, dass es sogar Stepname gibt ... – NealWalters

4

Sie können diese Abfrage verwenden -

SELECT s.step_id, 
     j.[name], 
     s.database_name, 
     s.command 
FROM msdb.dbo.sysjobsteps AS s 
INNER JOIN msdb.dbo.sysjobs AS j ON s.job_id = j.job_id 
WHERE s.command LIKE '%Stored_procedure%' 
+1

Es hat funktioniert, danke! – NealWalters

+1

Gern geschehen !! :) – AgentSQL

+0

Dies funktioniert mit SQL Server 2000 (kein Tippfehler), kann nach gespeicherter Prozedur ausgeführt werden – sojim2

0

Es gibt alternative alle Verfahren, die von allen Arbeitsplätzen innerhalb einer bestimmten Instanz aufgerufen zu finden:

SELECT jss.jobname, jss.step_name, p.name FROM sys.procedures p 

CROSS apply 
(
    SELECT j.name AS jobname, js.step_name FROM msdb.dbo.sysjobsteps js 
    INNER JOIN msdb.dbo.sysjobs j ON js.job_id=j.job_id 
    WHERE js.command LIKE '%'+p.name+'%' 
) jss