web-dev-qa-db-ja.com

SQLエージェントジョブから別のサーバーでストアドプロシージャを実行する

Sqlserver 2008 r2を使用して、SQLエージェントジョブでリモートサーバーのストアドプロシージャを実行しようとしています

  select * from openquery([1.1.1.1],'exec [DB_Name].[dbo].[sp_ProcName]')

または

EXEC [1.1.1.1].[DB_Name].[dbo].[sp_ProcName]

しかし、私は次のエラーを受け取りました:

Sys.serversにサーバー「1.1.1.1」が見つかりませんでした。正しいサーバー名が指定されていることを確認してください。必要に応じて、ストアドプロシージャsp_addlinkedserverを実行して、サーバーをsys.serversに追加します。

(正しいIPを入力します)ありがとうございます!

1
mich

エラーメッセージが示すように、OPENQUERYはリンクサーバーを探します。その設定がなく、その設定を取得する権限がない場合は、おそらく OPENROWSET クエリを使用するのがよいでしょう。これにより、完全な接続文字列を含むクエリを記述して、より臨機応変にデータソースに接続できます。

あなたの場合、次のようなものを使用することで結果を得ることができます:

SELECT spresults.* 
FROM OPENROWSET('SQLNCLI', 'Server=1.1.1.1;Trusted_Connection=yes;',
                'EXEC [db_name].dbo.[sp_ProcName]') AS spresults

警告:SPが複数の結果セットを返す場合、これは実行時に失敗します。

警告2:これは、アドホッククエリが許可されていない場合にも失敗します。それを整理するには、 appropriatesp_configure ステートメント:

exec sp_configure 'show advanced options', 1
reconfigure
exec sp_configure 'ad hoc distributed queries', 1
reconfigure

もちろん、sp_configure、SQL Serverで適切な権限が必要です。 sp_configure ドキュメンテーション、それは「ALTER SETTINGS」です。これは、デフォルトではsysadminおよびserveradminロールの一部ですが、他のロールにも割り当てることができます。

2
Thomas Rushton