SSIS 如何将数据流数据存储在临时 table 中,然后将其附加到电子邮件中?

SSIS How do I store dataflow data in a temporary table then attached it in an email?

我的目标是从现有的 table 中提取数据并进行一些基本转换(例如派生列、合并联接)。之后,我想将数据存储到一个变量中。然后,我将使用脚本任务用 C# 编写发送电子邮件程序,并调用变量将这些数据加载到我的电子邮件正文内容中。但是我很困惑在几步转换任务之后我可以在哪里存储这些临时数据。任何帮助,我很感激。

1.My整个控制流程

2.My 数据流,转换任务很少。我想知道如何在 Sort4 之后存储数据然后我可以将它们存储到变量中。

您可以使用脚本组件将此行存储在 DataTableList 中。

添加类型为 Object 的 SSIS 变量(例如:User::DataList

在数据流任务中,添加脚本组件作为 Destination。将所有列标记为输入。并使用以下代码。 (Vb.net)

列表版本

Public Class ScriptMain
    Inherits UserComponent

    Public Overrides Sub PostExecute()
        MyBase.PostExecute()

        Variables.DataList = lstObject

    End Sub

    Dim lstObject As Collections.Generic.List(Of DataClass)

    Public Overrides Sub Input0_ProcessInputRow(ByVal Row As Input0Buffer)

        lstObject.Add(New DataClass With {
                    .CompanyName = Row.CompanyName,
                    .CountryName = Row.Country,
                    .EmployeeName = Row.EmployeeName,
                    .Freight = CDbl(Row.Freight)})


    End Sub


End Class

Public Class DataClass

    Public Property CompanyName As String

    Public Property CountryName As String

    Public Property EmployeeName As String

    Public Property Freight As Double?


End Class

数据表版本

Public Class ScriptMain
    Inherits UserComponent

    Dim dtData As New System.Data.DataTable("dtData")

    Public Overrides Sub PostExecute()
        MyBase.PostExecute()

        Variables.DataList = dtData

    End Sub


    Public Overrides Sub PreExecute()
        MyBase.PreExecute()

        dtData.Columns.Add("CompanyName")
        dtData.Columns.Add("CountryName")
        dtData.Columns.Add("EmployeeName")
        dtData.Columns.Add("Freight")

    End Sub

    Public Overrides Sub Input0_ProcessInputRow(ByVal Row As Input0Buffer)


        Dim drRow As DataRow = dtData.NewRow

        drRow("CompanyName") = Row.CompanyName

        drRow("CountryName") = Row.Country

        drRow("EmployeeName") = Row.EmployeeName

        drRow("Freight") = Row.Freight

        dtData.Rows.Add(drRow)


    End Sub


End Class

将结果存储在FlatFileDestination中(平面文件名可以配置为日期时间名称+日期时间),并在发送邮件任务中使用该文件作为附件。可以配置附件路径。 使用文件系统任务发送电子邮件后,也可以从本地存储中删除发送的文件。

您也可以使用第三方工具(已授权)CozyRoc。它包括 'send Mail task plus' 等工具,支持电子邮件正文 html。使用脚本任务,您可以创建一个动态的 table (html table) 脚本,该脚本可以存储在变量中并可以显示在电子邮件中。

感谢您的所有回复 我也找到了解决办法。 我使用 Recordset Destination 这个数据目的地来帮助我存储我的临时数据。这个目的地可以称为外部数据流模式。 您还需要创建一个变量来存储您的数据。