2013-08-07 10 views
8

Jestem w SQL 2008/R2. Chcę uruchomić kwerendę, aby sprawdzić, czy istnieje zadanie agenta SQL wywołującego określony zapisany proces (zbyt wiele jest do ręcznego sprawdzenia).Jak znaleźć wszystkie zadania agenta SQL, które wywołują dane przechowywane-proc

+0

ta strona posiada wszystkie http: //www.mssqltips. com/sqlservertip/2561/querying-sql-server-agent-job-information/ –

+0

Zainstaluj narzędzie RedGate SQL Search w systemie SSMS. Jest bezpłatny i sprawia, że ​​wiele rzeczy jest bardzo proste. –

Odpowiedz

10

Oto zapytanie, które daje, a nawet więcej (zapoznać się z klauzulą ​​WHERE na zapisanym proc):

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] 

kredytowych powinien udać się do artykułu Querying SQL Server Agent Job Information przez dattatreja Sindol dla większości z powyższych pytanie.

+0

Zadziałało, dzięki! Podoba mi się to, że daje nawet nazwę kroku ... – NealWalters

4

Możesz użyć tej kwerendy -

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

Zadziałało, dzięki! – NealWalters

+1

Zapraszamy! :) – AgentSQL

+0

Działa to z serwerem sql 2000 (nie literówka), może wyszukiwać procedura przechowywana wykonywana – sojim2

0

Istnieje alternatywa, aby znaleźć wszystkie procedury, zwane przez wszystkich prac wewnątrz określonej instancji:

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 
Powiązane problemy