我需要使用SSIS 2005中的“发送邮件任务”来发送电子邮件,具体取决于脚本任务中的变量。
所以,到目前为止,我已经在变量选项卡中创建了一个变量,但似乎无法确定设置它的位置,或者如何使用代码访问它。
对于模糊的问题道歉,但这不是我的包,我正在努力帮助另一个团队。如果需要,我可以发送更多详细信息。
Public Function SetEmailAddress(ByVal variable x As String) As String
if x = y then set the isConfirmation variable.
上面的小代码片段是我在Script Task - process文件对象中尝试实现的。
答案 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
(以报告错误,警告和信息事件。记录这些信息是不好的做法)