SSIS Package 2005 - 动态ToLine

时间:2014-05-27 17:18:42

标签: ssis business-intelligence

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

所以,到目前为止,我已经在变量选项卡中创建了一个变量,但似乎无法确定设置它的位置,或者如何使用代码访问它。

对于模糊的问题道歉,但这不是我的包,我正在努力帮助另一个团队。如果需要,我可以发送更多详细信息。

Script task with a Send Mail Task

Variable within the Variable tab

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

上面的小代码片段是我在Script Task - process文件对象中尝试实现的。

1 个答案:

答案 0 :(得分:1)

我没有方便的2005 SSIS版本的副本,所以这个答案的一些是近似的。

您需要做的就是修改SSIS中对象的.Value 变量集合。

通过代码

设置变量值

使用2008+,他们修改了编辑器,以便您可以指定您将访问SSIS变量。我不记得他们是否在2005年推出了这款产品。基于Jamie's帖子,它看起来像是可用的。因此,您可以使用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和两个String变量Address1和Address2。当isConfirmation为true时,我们希望使用Address1。如果为false,我们要使用Address2。

您可以直接在对象上创建表达式,但无法对其进行调试。而是创建另一个变量,类型为string的FinalAddress。右键单击它并在属性菜单中,将EvaluateAsExpression属性设置为True,并在Expression中使用以下公式@[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(以报告错误,警告和信息事件。记录这些信息是不好的做法)