这对我有用:(即,我只需要由返回的30+中的2列sp_help_job
)
SELECT name, current_execution_status
FROM OPENQUERY (MYSERVER,
'EXEC msdb.dbo.sp_help_job @job_name = ''My Job'', @job_aspect = ''JOB''');
在此之前,我需要运行以下命令:
sp_serveroption 'MYSERVER', 'DATA ACCESS', TRUE;
....更新sys.servers
表格。(即默认情况下,似乎在OPENQUERY中使用自引用功能已被禁用。)
就我的简单要求而言,我没有遇到Lance优秀链接的OPENQUERY部分中描述的任何问题。
罗西尼,如果您需要动态设置这些输入参数,那么使用OPENQUERY会变得更加麻烦:
DECLARE @innerSql varchar(1000);
DECLARE @outerSql varchar(1000);
-- Set up the original stored proc definition.
SET @innerSql =
'EXEC msdb.dbo.sp_help_job @job_name = '''+@param1+''', @job_aspect = N'''+@param2+'''' ;
-- Handle quotes.
SET @innerSql = REPLACE(@innerSql, '''', '''''');
-- Set up the OPENQUERY definition.
SET @outerSql =
'SELECT name, current_execution_status
FROM OPENQUERY (MYSERVER, ''' + @innerSql + ''');';
-- Execute.
EXEC (@outerSql);
我不确定使用sp_serveroption
直接更新现有的sys.servers
自我参考与使用来之间存在差异(如果有)sp_addlinkedserver
创建重复/别名(如Lance的链接中所述。
注意1:由于OPENQUERY不需要proc中的连接字符串定义,因此我更喜欢OPENQUERY而不是OPENROWSET。
注意2:说完所有这些:通常我只会使用INSERT ... EXEC :)是的,这需要额外输入10分钟,但是如果我可以帮忙,我宁愿不要随意摆弄:
(a)引号内的引号引号和
(b)sys表,和/或偷偷摸摸的自引用链接服务器设置(即,对于这些,我需要向功能强大的DBA辩护:)
但是在这种情况下,我不能像以前那样使用INSERT ... EXEC构造sp_help_job
。(“不能嵌套INSERT EXEC语句。”)