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