2013-08-07 14 views
8

Sono in SQL 2008/R2. Voglio eseguire una query per vedere se c'è un processo di agente SQL che chiama un proc memorizzato specificato (ce ne sono troppi da ispezionare manualmente).Come trovare tutti i processi SQL Agent che chiamano un dato stored-proc

+0

questa pagina hanno tutti http: //www.mssqltips. it/sqlservertip/2561/querying-sql-server-agent-job-information/ –

+0

Installa lo strumento di ricerca SQL RedGate in SSMS. È gratuito e rende un sacco di cose un gioco da ragazzi. –

risposta

10

Ecco una domanda che vi darà questo e molto altro (sguardo alla clausola di WHERE per il nome proc memorizzato):

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] 

credito dovrebbe andare l'articolo Querying SQL Server Agent Job Information da dattatreya Sindol per la maggior parte di quanto sopra query.

+0

Ha funzionato, grazie! Mi piace che dia anche stepname ... – NealWalters

4

È possibile utilizzare questa query -

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

Ha funzionato, grazie! – NealWalters

+1

Siete i benvenuti !! :) – AgentSQL

+0

Funziona con sql server 2000 (non è un refuso), può cercare la stored procedure eseguita – sojim2

0

C'è un'alternativa per trovare tutte le procedure chiamate da tutti i lavori all'interno di una specifica istanza:

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 
Problemi correlati