web-dev-qa-db-ja.com

Send DBMailで複数の添付ファイルを送信する

2つのファイル名を;で区切る必要があるだけだと思っていましたが、次のエラーで構文が失敗します

Msg 102, Level 15, State 1, Line 251
Incorrect syntax near '@filename2'.

これは私の完全な構文ですが、両方のファイルをメールに添付するにはどうすればよいですか?

Declare @filename1 varchar(max), @filename2 varchar(max)
Set @filename1 = 'C:\Testfiles\Test1.csv'
Set @filename2 = 'C:\Testfiles\Test2.csv'

EXEC msdb.dbo.sp_send_dbmail
  @profile_name = 'Mod',
  @from_address = '[email protected]',
  @recipients= '[email protected]',
  @subject= 'Test Email', 
  @body = @body1,
  @file_attachments = @filename1;@filename2;
2

セミコロンはステートメントのターミネーターであり、添付ファイルを正しくエスケープしていません。言い換えれば、これは次のとおりです。

EXEC msdb.dbo.sp_send_dbmail
  @profile_name = 'Mod',
  @from_address = '[email protected]',
  @recipients= '[email protected]',
  @subject= 'Test Email', 
  @body = @body1,
  @file_attachments = @filename1;

@filename2; -- Syntax Error

MSDN記事 によるとsp_send_dbmail

[@ file_attachments =] 'file_attachments'

電子メールメッセージに添付するファイル名のセミコロン区切りリストです。リスト内のファイルは、絶対パスとして指定する必要があります。添付リストはnvarchar(max)タイプです。既定では、データベースメールは添付ファイルをファイルあたり1 MBに制限します。

これを行う必要があります:

Declare @filenames varchar(max)
Set @filenames = 'C:\Testfiles\Test1.csv;C:\Testfiles\Test2.csv'

EXEC msdb.dbo.sp_send_dbmail
  @profile_name = 'Mod',
  @from_address = '[email protected]',
  @recipients= '[email protected]',
  @subject= 'Test Email', 
  @body = @body1,
  @file_attachments = @filenames;

プログラムで添付ファイルを追加する場合は、次のようにします(2番目と3番目のファイルがセミコロンで始まることに注意してください)。

DECLARE @filenames varchar(max)
DECLARE @file1 VARCHAR(MAX) = 'C:\Testfiles\Test1.csv'
SELECT @filenames = @file1

-- Optional new attachments
DECLARE @file2 VARCHAR(MAX) = ';C:\Testfiles\Test2.csv'
DECLARE @file3 VARCHAR(MAX) = ';C:\Testfiles\Test3.csv'

-- Create list from optional files
SELECT @filenames = @file1 + @file2 + @file3

-- Send the email
EXEC msdb.dbo.sp_send_dbmail
  @profile_name = 'Mod',
  @from_address = '[email protected]',
  @recipients= '[email protected]',
  @subject= 'Test Email', 
  @body = @body1,
  @file_attachments = @filenames;
7
Randolph West