我有一个简单的软件包,用于更新我的数据库,然后将数据导出到五个不同的文件。我正在尝试做的是生成一封电子邮件,详细说明每个导出是否已成功运行。所以我想在电子邮件中找到类似的内容:
|EXPORT | STATUS |
| 4 | Success |
| 5 | Success |
| 6 | Success |
| 7 | Failed |
| 8 | Success |
最初,我设置了单独的成功和失败(Logical OR
)电子邮件任务。这让我可以确定所有任务都成功了,或者至少有一次失败......但这并不是我想要的。
然后,我查看this example并在我的脚本任务中用C#重写它,但我意识到示例中的变量似乎不存在(脚本会抛出错误),所以我尝试创建用户变量并在ReadWriteVariables
中传递它们,脚本将成功运行但发送邮件任务中不显示任何内容,该脚本实际上没有做任何事情。
我已经看了几个类似的问题,this one 似乎接近我想要的,它解释了做什么 ,但并没有真正帮助像我这样的初学者实际做到这一点。
以下是我的控制流程供参考:
脚本任务中的Main
方法:
ArrayList messages = new ArrayList();
try
{
messages = (ArrayList) Dts.Variables["ErrorCollection"].Value;
}
catch (Exception Ex)
{
// Handle errors...
}
messages.Add(Dts.Variables["ErrorDescription"].Value.ToString());
Dts.Variables["ErrorCollection"].Value = messages;
Dts.Variables.Unlock();
Dts.TaskResult = (int)ScriptResults.Success;
我不知道我是否以错误的方式解决这个问题,这可能是一种简单的方法,但是对SSIS不熟悉我不知道它是什么。任何帮助将不胜感激。谢谢!
答案 0 :(得分:1)
是的,我设法自己搞清楚了。对于任何面临类似问题的人来说,我就是这样做的:
1
或0
。在我的例子中,我将每个任务的变量设置为默认的成功消息字符串。OnError
事件处理程序应用于您要监控的每个任务Expression Task
处理程序中放置OnError
并使用它将变量设置为失败条件。例如。 @[User:YourVariable] = "Failed"
Send Mail Task
中,您可以在发送邮件任务编辑器的“表达式”选项卡中连接之前为MessageSource
创建的每个变量。此解决方案完全跳过Script Task
,但如果您想构建更详细的电子邮件,则可以将变量传递给脚本,而不是直接传递到发送邮件任务。