web-dev-qa-db-ja.com

複数の選択ステートメントの結果を含むSQLジョブからメールを送信する方法

SQLジョブを作成し、クエリ結果に含まれる複数の選択ステートメントを含む電子メールを送信したいと考えています。 SQLジョブで可能ですか、それともSSISを使用する必要がありますか?

編集1:

EXEC msdb.dbo.sp_send_dbmail  
    @profile_name = 'Adventure Works Administrator',  
    @recipients = '****@abc.com', 
    @Execute_query_database = 'AdventureWorks',
    @query = 'SELECT COUNT(*) FROM AdventureWorks.Production.WorkOrder  
                  WHERE DueDate > '2018-03-30'  
                  AND  DATEDIFF(dd, '2004-04-30', DueDate) < 2
              SELECT * FROM NorthWind.Production.Work  
                  WHERE DueDate > '2018-04-30'  
                  ' ,  
    @subject = 'Work Order Count',  
    @attach_query_result_as_file = 1 ;

エラーメッセージ:添付ファイルまたはクエリ結果のサイズが許容値の1000000バイトを超えています。

編集2:SQLエージェントジョブが目的のDBをポイントしておらず、sp_send_emailにデータベース名がないように感じます。 @Execute_query_database = 'AdventureWorks'を追加しましたが、SQL SELECTSでは2つの異なるデータベースを使用しているため、改善はありません。

何かご意見は?

1
CR241

あなたは基本的に最大であるSQLサーバーから1GBのファイルを送信しています。次を使用してデフォルトを再構成できます

exec msdb.dbo.sysmail_configure_sp 'MaxFileSize'、 '2000000'-2GB

私は、ファイルのbcpを使用し、Zipまたは7Zipを使用して圧縮してから、powershellまたはssisを使用して送信します。

6
Kin Shah

あなたの質問に答えるために、クエリに多くのselectステートメントを含めることが可能です、私は数の制限を知りません。

最初のクエリは問題なく実行されますが、2番目のクエリは設定が許可するよりも大きい結果セットを作成するため、送信されません。@ kinに同意し、結果をどこかに保存してからリンクに電子メールを送信することをお勧めします。おまけとして、ネットワーク管理者も幸せになります!

3
James Reeves

@queryパラメーターでセミコロンを使用してT-SQLステートメントを適切に終了すると、添付ファイルに両方の結果セットが表示されます(結果セットが添付ファイルの制限サイズよりも小さいと想定)。また、日付値をエスケープする必要があります。

EXEC msdb.dbo.sp_send_dbmail  
    @profile_name = 'Adventure Works Administrator',  
    @recipients = '****@abc.com', 
    @query = 'SELECT COUNT(*) 
              FROM AdventureWorks.Production.WorkOrder  
              WHERE DueDate > ''2018-03-30''  
              AND  DATEDIFF(dd, ''2004-04-30'', DueDate) < 2;
              SELECT * FROM NorthWind.Production.Work  
              WHERE DueDate > ''2018-04-30'';' ,  
    @subject = 'Work Order Count',  
    @attach_query_result_as_file = 1 ;
2
Colin Douglas