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

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

enter image description here

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

enter image description here


这是为什么你应该在查询中处理事务而不是在SSIS中处理的最佳例证。你可以编写一个存储过程,利用SQL邮件发送电子邮件,从而真正简化此过程。 - Nick.McDermaid
3个回答

1
你可以使用脚本组件将这些行存储在DataTableList中。
添加一个类型为Object的SSIS变量(例如:User::DataList)。
在数据流任务中,将脚本组件作为Destination添加。将所有列标记为输入,并使用以下代码(Vb.net)。 List版本
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

DataTable 版本

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

1

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

enter image description here

您还可以使用第三方工具(有许可证)CozyRoc。它包括像“发送邮件任务加强版”之类的工具,支持将电子邮件正文作为HTML格式。使用脚本任务,您可以创建一个动态表格(HTML表格)脚本,该脚本可以存储在变量中,并且可以在电子邮件中显示。


1
感谢您们的回应。我也找到了一个解决方案。我使用记录集目标这个数据目标来帮助我存储我的临时数据。这个目标可以在数据流模式外调用。您还需要创建一个变量来存储您的数据。

enter image description here enter image description here


如果这是解决方案,即使它是你自己的答案,你也必须接受它。 - Yahfoufi
你已经发布了解决方案(这个答案),并接受了另一个答案(观察者解决方案),即使这个答案是你自己的,你也应该接受它,因为它解决了你的问题。 - Yahfoufi

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接