SSIS包2005-动态托林

SSIS包2005-动态托林,ssis,business-intelligence,Ssis,Business Intelligence,我需要使用SSIS 2005中的“发送邮件”任务发送电子邮件,具体取决于脚本任务中的变量 到目前为止,我已经在variables选项卡中创建了一个变量,但似乎不知道在哪里设置它,或者如何使用代码访问它 我为这个模糊的问题道歉,但这不是我的包,我正试图帮助另一支球队。如果需要,我可以发送更多详细信息 Public Function SetEmailAddress(ByVal variable x As String) As String if x = y then set the isConfir

我需要使用SSIS 2005中的“发送邮件”任务发送电子邮件,具体取决于脚本任务中的变量

到目前为止,我已经在variables选项卡中创建了一个变量,但似乎不知道在哪里设置它,或者如何使用代码访问它

我为这个模糊的问题道歉,但这不是我的包,我正试图帮助另一支球队。如果需要,我可以发送更多详细信息

Public Function SetEmailAddress(ByVal variable x As String) As String
if x = y then set the isConfirmation variable.


上面的小代码片段是我试图在脚本任务-进程文件对象中实现的。

我手边没有2005 SSIS版本的副本,所以这个答案有些是近似的

总而言之,您需要做的是修改SSIS中对象的
.Value
变量集合

通过代码设置变量的值 使用2008+,他们修改了编辑器,以便您可以指定要访问SSIS变量。我记不起他们是否在2005年提供了这项服务。根据帖子,它看起来是可用的。因此,您可以使用GUI来指示您要修改
isConfirmation
的值,也可以执行下面的锁定/解锁过程

Imports Microsoft.SqlServer.Dts.Runtime
Public Class ScriptMain
  Public Sub Main()
    Dim vars As Variables
    Dts.VariableDispenser.LockOneForWrite("isConfirmation", vars)
    ' Assign a boolean value to the thing we just locked for modifying
    vars(0).Value = (x=y)
    vars.Unlock()
    Dts.TaskResult = Dts.Results.Success
  End Sub
End Class
如果您使用GUI来指示您正在锁定变量,那么大约

Imports Microsoft.SqlServer.Dts.Runtime
Public Class ScriptMain
  Public Sub Main()
    ' Update it in place
    Dts.Variables("isConfirmation").Value = (x=y)
    Dts.TaskResult = Dts.Results.Success
  End Sub
End Class
即使您使用的是不区分大小写的VB,基本SSIS对象模型也是区分大小写的,因此在Variables集合中找不到IsConfirmation

把它们放在一起 假设创建了三个SSIS变量,isConfirmation-boolean和两个字符串变量Address1和Address2。当isConfirmation为true时,我们希望使用Address1。如果为false,我们希望使用Address2

您可以直接在对象上创建表达式,但无法调试该表达式。相反,创建另一个变量FinalAddress,类型为string。右键单击它,在“属性”菜单中,将EvaluateExpression属性设置为True,并在表达式中使用以下公式
@[User::isConfirmation]@[User::Address1]:@[User::Address2]

然后,在发送邮件任务本身上,将ToLine(近似值)设置为
@[User::FinalAddress]

故障排除 根据评论,在服务器上运行包时会出现问题。在这种情况下,我希望从包中引发一些事件消息

    Dim fireAgain As Boolean = True
    Dim isCurrent As Boolean = True
    ' logic here
    ' report on status of what we care about
    Dts.Events.FireInformation(0, "Debug", String.Format("isCurrent = {0}", isCurrent), String.Empty, 0, ByRef fireAgain)

通过代理或命令行调用包时,您需要确保
/REPORTING E
参数变为
/REPORTING EIW
(报告错误、警告和信息事件。按原样记录此信息很少是不好的做法)

根据
isConfirmation
的值,您将发送到A@foo.com或b@foo.com. 脚本任务设置了isConfirmation的值,您的问题是如何使发送邮件任务的行为基于此而有所不同?您好,我似乎无法动态设置isConfirmation。我想我已经知道我需要在Send Mail对象上使用一个表达式,比如@User::isConfirmation?address1:Address2只需添加,还会出现一个相应的xml文件,名为projectname.dtsConfig,其中包含\PackageVariables[User::address….奇怪的是,我的isConfirmation变量在保存项目后没有显示。您在表达式部分是正确的。因此真正的问题是:如何在脚本任务中修改SSIS变量的值?确实,这似乎是个问题。然而,我的逻辑似乎正确,但可能我没有正确实现它。谢谢s billinkc,我将在上午对此进行一次狂欢和测试。如果您或您的队友还没有抓取并安装它,我将非常感谢。它使SSIS的工作体验更加愉快,特别是在2012年之前的发行版上。我一定会看一看。嗨billinkc,如果我在Business Studio中运行,并手动将ISconfiration从True设置为false,然后单击“发送电子邮件”任务,我可以看到电子邮件地址按预期发生更改。但是,当部署该任务时(仅将dtsx文件复制到DTS文件夹中),收件人不正确。基本上,逻辑似乎不起作用。我添加了有关疑难解答的部分。请参阅这一部分。