SSIS:通用 "Derived Column" 和 "RecordSet Destination"
SSIS : Generic "Derived Column" and "RecordSet Destination"
我想知道是否可以创建通用 "Derived Column" 和通用 "RecordSet Destination"
我正在尝试从日志中收集一些信息 table 并将数据发送给适当的收件人。
根据错误类型,我需要从 table 中收集一些字段。
有些字段是日期,如果我收集了它们,我想使用它们(派生列)
然后,我将它们存储在 "RecordSet Destination" 中以从中创建一个 table(htm 文件)并通过电子邮件发送。
- 那么 "Derived Column" 中有没有一种方法可以说明如果列 "X" 存在然后将其替换为 (...)?
- 有没有办法将 (*) 放在 "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;
}
我想知道是否可以创建通用 "Derived Column" 和通用 "RecordSet Destination"
我正在尝试从日志中收集一些信息 table 并将数据发送给适当的收件人。 根据错误类型,我需要从 table 中收集一些字段。 有些字段是日期,如果我收集了它们,我想使用它们(派生列) 然后,我将它们存储在 "RecordSet Destination" 中以从中创建一个 table(htm 文件)并通过电子邮件发送。
- 那么 "Derived Column" 中有没有一种方法可以说明如果列 "X" 存在然后将其替换为 (...)?
- 有没有办法将 (*) 放在 "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;
}