2009-08-24 13 views
7

私はすべての悪いフォーラムで、すべての手段を試しましたが、役に立たないです! テーブルに格納されたSQLPERF(logspace)の結果を、sp_send_dbmailを介して受信者に送信する必要があります。sp_send_dbmailはクエリ結果を送信しません

ジョブのステップ2は、障害が発生する場所です。助けてください!

EXEC msdb.dbo.sp_send_dbmail 
@profile_name= 'MyDBA', 
@recipients= '[email protected]', 
@subject='Log Warning', 
@query='SELECT * from #TempForLogSpace WHERE LogSpaceUsed >80 
+0

あなたは '@のquery'から欠落している終了引用符に気づきましたか? – jumxozizi

答えて

10

データベースメールを使用して、一時テーブルから照会することはできません。テンポラリテーブルを作成するために使用したセッション(私が想定しているジョブのステップ1)が閉じられ、ステップ2が開始されたときに新しいセッションが開始されました。セッションが閉じられたため、テーブルは削除されました(テーブルが削除されていない場合でも、新しいセッションであるため、他のセッションの一時テーブルにアクセスできません)。

物理的なテーブルを作成し、tempdbデータベースまたはデータベースのいずれかで使用するか、出力を作成するコードを@queryのselect * fromTempForLogSpaceから最後に挿入します(ストアドプロシージャはこのケースでは扱いがはるかに簡単です)。

5

私はこのスレッドが少し古くなっていることを知っていますが、誰かがこの問題を抱えている場合、問題はmrdennyがsp_send_dbmailストアドプロシージャを自分のセッションで実行しているようですが、代わりにグローバル一時テーブル(表の先頭に2つのシャープ記号(##)が付いています)。

0

##temp_tableのようなグローバルな一時表を使用してください。このテーブルはすべてのセッションからアクセス可能で、それを参照するすべてのセッションが閉じられるまでデータベースに残ります。

Local and global temporary tables in SQL Server

関連する問題