これは私にとってはうまくいきます:(つまり、によって返された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
更新する場合と、 (Lance のリンクで説明されているように) を使用して複製/エイリアスを作成する場合の違い (もしあれば) はわかりません。sys.servers
sp_addlinkedserver
注 1: OPENQUERY は proc 内で接続文字列の定義を必要としないため、OPENROWSET よりも OPENQUERY を好みます。
注 2: 以上のことをすべて言いましたが、通常は INSERT ... EXEC を使用するだけです:) はい、10 分の余分な入力ですが、私がそれを助けることができれば、次のように動かしたくない:引用符、および
(b)sysテーブル、および/または卑劣な自己参照リンクサーバーセットアップ(つまり、これらについては、全能のDBAに私の主張を訴える必要があります:)
sp_help_job
ただし、この例では、既に使用されている INSERT ... EXEC 構成を使用できませんでした。(「INSERT EXEC ステートメントはネストできません。」)