SSIS:通用 "Derived Column" 和 "RecordSet Destination"

SSIS : Generic "Derived Column" and "RecordSet Destination"

我想知道是否可以创建通用 "Derived Column" 和通用 "RecordSet Destination"

我正在尝试从日志中收集一些信息 table 并将数据发送给适当的收件人。 根据错误类型,我需要从 table 中收集一些字段。 有些字段是日期,如果我收集了它们,我想使用它们(派生列) 然后,我将它们存储在 "RecordSet Destination" 中以从中创建一个 table(htm 文件)并通过电子邮件发送。

  1. 那么 "Derived Column" 中有没有一种方法可以说明如果列 "X" 存在然后将其替换为 (...)?
  2. 有没有办法将 (*) 放在 "RecordSet Destination" 中,无论我们有什么字段?

看来脚本的使用是没法避免的。此 post 上的流量不多,我无法在网上找到答案。

我有一个脚本可以适应我的新需求,我只需要更改填充数据的方式 table。

        public void Main()
    {
        OleDbDataAdapter oleDA = new OleDbDataAdapter(); 
        DataTable dt = new DataTable();
        StringBuilder sb = new StringBuilder();
        string tab = "\t";

        oleDA.Fill(dt, Dts.Variables["DataToSendToIT"].Value);

        sb.AppendLine("<html>");
        sb.AppendLine(tab + "<body>");
        sb.AppendLine(tab + tab + "<table>");

        // headers.
        sb.Append(tab + tab + tab + "<tr>");

        foreach (DataColumn dc in dt.Columns)
        {
            sb.AppendFormat("<td bgcolor=#CEC8C5>{0}</td>", dc.ColumnName);
        }

        sb.AppendLine("</tr>");

        int i = 0;

        foreach (DataRow dr in dt.Rows)
        {
            sb.Append(tab + tab + tab + "<tr>");

            i = i + 1;

            foreach (DataColumn dc in dt.Columns)
            {
                string cellValue = dr[dc] != null ? dr[dc].ToString() : "";
                if (i % 2 == 0)
                {
                    sb.AppendFormat("<td bgcolor=#CCEEFF>{0}</td>", cellValue);
                }
                else
                {
                    sb.AppendFormat("<td>{0}</td>", cellValue);
                }
            }

            sb.AppendLine("</tr>");
        }

        sb.AppendLine(tab + tab + "</table>");
        sb.AppendLine(tab + "</body>");
        sb.AppendLine("</html>");


        string currentLogFile = Dts.Variables["ScaleFolderPath"].Value.ToString() + Dts.Variables["LogsFolder"].Value.ToString() + "Log " + DateTime.Now.ToString("yyyy-MM-dd HH-mm-ss") + ".htm";
        File.WriteAllText(currentLogFile, sb.ToString());
        Dts.Variables["CurrentLogFile"].Value = currentLogFile;

        Dts.TaskResult = (int)ScriptResults.Success;
    }