SSIS:Generic" Derived Column"和" RecordSet目的地"

时间:2015-03-02 20:14:39

标签: ssis

我想知道是否有可能创建一个通用的"派生列"和一个通用" RecordSet目的地"

我试图从日志表中收集一些信息并将数据发送给相应的收件人。 根据错误的类型,我需要从表中收集一些字段。 一些字段是日期,如果我收集它们,我想工作它们(派生列) 然后,我将它们存储在" RecordSet Destination"从中创建一个表(htm文件)并通过电子邮件发送。

  1. 在#34; Derived Column"中有没有办法?如果列" X"存在然后用(...)?
  2. 替换它
  3. 有没有办法把(*)放在" RecordSet目的地"无论我们有什么领域?

1 个答案:

答案 0 :(得分:1)

似乎没有办法避免使用脚本。这篇文章的流量不是很多,我也无法在网上找到答案。

我有一个适应我新需求的脚本,我只需要改变填充数据表的方式。

        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;
    }