这对我有用:(即我只需要 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 部分中描述的任何问题。
Rossini,如果您需要动态设置这些输入参数,那么使用 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 而不是 OPENROWSET,因为 OPENQUERY 不需要 proc 中的连接字符串定义。
注意 2:说了这么多:通常我只会使用 INSERT ... EXEC :) 是的,这是 10 分钟的额外打字,但如果我能帮助它,我不想乱搞:
(a)引号内的引号引号,和
(b) sys 表,和/或偷偷摸摸的自引用链接服务器设置(即,对于这些,我需要向我们全能的 DBA 辩护:)
但是在这种情况下,我不能使用 INSERT ... EXEC 构造,因为sp_help_job
已经使用了一个。(“不能嵌套 INSERT EXEC 语句。”)