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