2016-01-28 122 views
1

我正试图探索从存储过程中进行选择的可能性。从存储过程输出中选择

像这样的事情

SELECT name 
FROM exec msdb..sp_help_job 
WHERE name = 'SampleJob' 

我明白SQL Server - SELECT FROM stored procedure,一个用户定义函数或视图可以使用,但这些都不是我的选择。

原因是由于AWS-RDS的权限限制,我无法运行以下SQL语句。

SELECT name as Jobs 
FROM msdb..sysjobs 

这让我没有选择,只能使用msdb..sp_help_job

我最终想实现的是这个“如果没有创建作业,那么运行创建作业脚本”。我需要从存储过程中选择是为了查看作业是否存在。

欣赏任何建议/指示。

+0

参数值( 'SampleJob')传递给你的SP并返回结果。 –

+2

使用临时表。见http://stackoverflow.com/questions/653714/insert-results-of-a-stored-procedure-into-a-temporary-table –

+0

有没有办法做到这一点,而不必创建任何临时表? – Darren

回答

1

如果您想创建某些内容,但担心它可能已经存在,请使用try/catch块。

begin try 
    exec dbo.sp_add_job . . . 
end try 
begin catch 
    print 'Error encountered . . . job probably already exists' 
end catch; 

说实话,我还没有做过这个工作/工作步骤。但是,这是重新创建表格,视图等的一种方式。

1

根据sp_help_job的文档MSDN此存储过程有一个@job_name参数和一个简单的返回码(0 =成功或1 =失败)。

如果您在拨打sp_help_job时设置了@job_name参数并获取返回代码,您应该能够测试返回代码的值以完成您想要的操作。

像这样的东西应该工作:

DECLARE @return_value int 

EXEC @return_value = msdb..sp_help_job @job_name = 'MyJobName' 

-- @return_value = 1 means the specified @job_name does not exist 
IF @return_value = 1 
BEGIN 
    -- run create job script 
END