2013-08-07 19 views
8

Tôi đang ở trong SQL 2008/R2. Tôi muốn chạy một truy vấn để xem nếu có một công việc đại lý SQL gọi một proc được lưu trữ quy định (có quá nhiều để kiểm tra bằng tay).Cách tìm tất cả các tác vụ của tác nhân SQL gọi là proc được lưu trữ

+0

trang này có tất cả http: //www.mssqltips. com/sqlservertip/2561/truy vấn-sql-server-agent-thông tin việc làm/ –

+0

Cài đặt công cụ tìm kiếm SQL RedGate trong SSMS. Đó là miễn phí và làm cho rất nhiều điều một cách dễ dàng. –

Trả lời

10

Dưới đây là một truy vấn mà sẽ cung cấp cho bạn và nhiều hơn nữa (nhìn vào WHERE khoản cho tên proc lưu trữ):

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] 

tín dụng nên đến bài viết Querying SQL Server Agent Job Information bởi Dattatrey Sindol đối với hầu hết những điều trên truy vấn.

+0

Nó hoạt động, cảm ơn! Tôi thích rằng nó thậm chí còn mang lại cho stepname ... – NealWalters

4

Bạn có thể sử dụng truy vấn này -

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

Nó hoạt động, cảm ơn! – NealWalters

+1

Bạn được chào đón !! :) – AgentSQL

+0

Điều này làm việc với máy chủ sql 2000 (không phải lỗi đánh máy), có thể tìm kiếm thủ tục được lưu trữ được thực hiện – sojim2

0

Có thay thế cho tất cả các thủ tục gọi là bởi tất cả các công việc bên trong một trường hợp cụ thể:

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 
Các vấn đề liên quan