如何使用SSIS将查询结果集作为附件发送到电子邮件中?

时间:2010-12-02 14:47:14

标签: sql-server ssis

我有一个保存在System.Object变量上的Execute SQL Task查询的结果集,我想使用Send Mail Task使用MessageSource上的以下表达式发送此结果。

  

“请查找附件数据摘要\ n \ n”+ SUBSTRING(@ [User :: myVariable],1,3990)
  +“\ n \ n”

2 个答案:

答案 0 :(得分:20)

可能你现在已经找到了问题的答案。这个答案适用于可能偶然发现这个问题的其他人。我不认为你可以在表达式中使用对象变量。您需要遍历查询结果对象并将其格式化为字符串,以便您可以在电子邮件中发送查询输出。您还可以将数据导出到文件并将文件作为附件发送。这是另一种可能的选择。此示例显示如何遍历查询结果集以形成将使用“发送电子邮件”任务通过电子邮件发送的邮件正文。

分步流程:

  1. 使用 SQL Scripts 部分下提供的脚本创建名为dbo.EmailData的表。

  2. 屏幕截图# 1 显示Execute SQL任务将在此示例中查询并通过电子邮件发送的示例数据。

  3. 在SSIS包中,创建 5 变量,如屏幕截图# 2 所示。

  4. 在SSIS包中,在 Foreach循环容器和{{1}中放置以下任务:Execute SQL taskForeach loop containerScript task }。

  5. 配置Send Email task,如屏幕截图# 3 和# 4 所示。

  6. 配置Execute SQL task,如屏幕截图# 5 和# 6 所示。 “变量映射”部分显示查询结果列的显示顺序以及如何将它们分配给SSIS变量。这些变量将用于在Foreach loop container

  7. 中形成电子邮件
  8. Script task中,将代码替换为脚本任务代码部分下显示的代码。脚本任务具有非常简单的纯文本电子邮件格式。

  9. 配置发送电子邮件任务,如屏幕截图# 7 所示。您需要在字段中使用有效的电子邮件地址对其进行配置。

  10. 配置控制流程任务后,您的软件包应如屏幕截图# 8 所示。

  11. 示例包执行显示在屏幕截图# 9 中。

  12. 该软件包发送的电子邮件显示在屏幕截图# 10 中。某些信息已从屏幕截图中删除。您可以将屏幕截图# 1 中显示的表格数据与此电子邮件输出进行比较,它们应该相同。

  13. 希望有所帮助。

    SQL脚本:

    Script task

    脚本任务代码:

    C#代码,只能在 CREATE TABLE [dbo].[EmailData]( [Id] [int] IDENTITY(1,1) NOT NULL, [ItemId] [varchar](255) NOT NULL, [ItemName] [varchar](255) NOT NULL, [ItemType] [varchar](255) NOT NULL, [IsProcessed] [bit] NULL, CONSTRAINT [PK_EmailData] PRIMARY KEY CLUSTERED ([Id] ASC)) ON [PRIMARY] GO 中使用。

    SSIS 2008 and above

    屏幕截图#1:

    1

    屏幕截图#2:

    2

    屏幕截图#3:

    3

    屏幕截图#4:

    4

    屏幕截图#5:

    5

    屏幕截图#6:

    6

    屏幕截图#7:

    7

    屏幕截图#8:

    8

    屏幕截图#9:

    9

    屏幕截图#10:

    10

答案 1 :(得分:2)

经过多次尝试,这种方法确实有效。但是,如果您使用的是Visual Studio 2010或更高版本,则需要稍微更改C#脚本。

替换:

[System.AddIn.AddIn("ScriptMain", Version = "1.0", Publisher = "", Description = "")]

用这个:

[Microsoft.SqlServer.Dts.Tasks.ScriptTask.SSISScriptTaskEntryPointAttribute]

仍然试图理清我收到的电子邮件中的间距,但对结果非常满意。

相关问题