使用 Send DBMail 发送多个附件

Sma*_*uys 3 sql-server t-sql sql-server-2008-r2

我以为你只需要用 a 分隔两个文件名,;但我的语法失败并出现错误

Msg 102, Level 15, State 1, Line 251
Incorrect syntax near '@filename2'.
Run Code Online (Sandbox Code Playgroud)

这是我的完整语法,我需要做什么才能将两个文件附加到我的电子邮件中?

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 = 'modis@modisglobal.com',
  @recipients= 'rsmith@gmail.com',
  @subject= 'Test Email', 
  @body = @body1,
  @file_attachments = @filename1;@filename2;
Run Code Online (Sandbox Code Playgroud)

Ran*_*est 8

分号是语句终止符,您没有正确转义您的附件。换句话说,你已经做到了:

EXEC msdb.dbo.sp_send_dbmail
  @profile_name = 'Mod',
  @from_address = 'modis@modisglobal.com',
  @recipients= 'rsmith@gmail.com',
  @subject= 'Test Email', 
  @body = @body1,
  @file_attachments = @filename1;

@filename2; -- Syntax Error
Run Code Online (Sandbox Code Playgroud)

按照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 = 'modis@modisglobal.com',
  @recipients= 'rsmith@gmail.com',
  @subject= 'Test Email', 
  @body = @body1,
  @file_attachments = @filenames;
Run Code Online (Sandbox Code Playgroud)

如果您想以编程方式添加附件,您可以这样做(注意第二个和第三个文件如何以分号开头):

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 = 'modis@modisglobal.com',
  @recipients= 'rsmith@gmail.com',
  @subject= 'Test Email', 
  @body = @body1,
  @file_attachments = @filenames;
Run Code Online (Sandbox Code Playgroud)