0

データベースからデータを取得し、MSDB.DBO.sp_send_dbmailを使用して電子メールを送信する手順があります。'EXEC myprocedure'を使用すると、プロシージャ自体が問題なく実行されます。しかし、プロシージャのジョブを設定すると、ジョブは次のエラーで失敗します

'クエリのフォーマットエラー、おそらく無効なパラメータ[SQLState 42000](エラー22050)。ステップは失敗しました」

プロシージャが保存されているデータベースを使用して、TSQLステートメント'EXECmyprocedure'を使用したジョブの1つのステップがあります。誰かがこのエラーの原因を知っていますか?

アップデート

問題を絞り込みました。これは、私が使用しているExchangeサーバーの問題です。データベースメールのアカウント構成ウィザードで、「サーバー名」としてドメインアドレス(例:mail.mycompany.com)を使用していました。このドメインアドレスを使用して、listservsおよび外部ユーザーに電子メールを送信できませんでした。私はExchangeの担当者と話をしましたが、彼はメールサーバーの1つの実際のIPアドレス(つまり、10.123.53.53)を使用することを勧めました。これでlistservsと外部ユーザーの問題は修正されましたが、ジョブを使用してプロシージャを実行すると電子メールを送信できなくなりました(手動で実行するとプロシージャ自体が正しく実行されます)。これを修正するために変更する必要があるExchangeサーバーの基準を知っている人はいますか?

4

2 に答える 2

0

これは、権限の問題のようなものです。提供された情報から、問題のアクセス許可を正確に指定することはできませんが、TSQLジョブステップはサーバーエージェントサービスアカウントのコンテキストで実行されるため、そのアカウントに、ビルドに使用されているテーブルに対するSELECTアクセス許可があることを確認してくださいクエリを実行し、データベースメール内で使用しているプロファイルへのアクセス許可があることを確認します。

于 2012-11-07T07:15:16.503 に答える
0

問題は、sp_send_dbmailで使用される@queryパラメーターにありました。何らかの理由で、SQL Serverエージェントアカウント(ドメイン管理者)は、@queryパラメーターでsp_send_dbmailを使用するためのアクセスを拒否されました。結局、@ queryパラメーターを完全に削除し、すべてを@bodyパラメーターに入れました。@bodyパラメータは、通常のテキストとSELECTクエリから返されたものの連結になりました。

于 2012-11-13T21:34:59.693 に答える