从存储过程输出中选择

时间:2016-01-28 00:36:16

标签: sql sql-server tsql

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

像这样的东西

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

我最终想要实现的是“如果未创建作业,则运行创建作业脚本”。我需要从存储过程中选择的原因是查看作业是否存在。

感谢任何建议/指示。

2 个答案:

答案 0 :(得分:1)

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

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

老实说,我还没有完成工作/工作步骤。但是,这是重新创建表,视图等的一种方法。

答案 1 :(得分:1)

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

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

这样的事情应该有效:

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