SSIS 表达式中的 Case 或 if 语句

Case or if statement in SSIS expression

我在 SSIS 中有一个项目参数,我想使用它来更改我们的数据源连接。

我正在尝试在连接属性中编写一个表达式,但我做空了。我希望能够评估几个不同的值和 return 个不同的值,如果 true

这是我的

@[$Project::Parameter] == "SERVER1" ? @[$Project::SERVER1_ConnectionString]  
: ( @[$Project::Parameter] == "SERVER2" ? @[$Project::SERVER2_ConnectionString] 
: ( @[$Project::Parameter] == "SERVER3" ? @[$Project::SERVER3_ConnectionString]  
: "Unknown Server"))

我已经尝试将其他服务器添加到此代码中,但我一定不理解您如何评估其他结果并设置其他值

基本上,我想这样做

如果Parameter = SERVER1就给我SERVER1_ConnectionString,如果Parameter = SERVER2就给我SERVER2_ConnectionString等等...

编辑:语法正确,但我的问题是我的项目参数有错字

将变量计算为表达式

最简单的方法是添加一个字符串类型的变量 @[User::ConnectionSting],Select 以将此变量计算为表达式,并使用以下表达式:

@[$Project::Parameter] == "SERVER1" ? @[$Project::SERVER1_ConnectionString]  
: ( @[$Project::Parameter] == "SERVER2" ? @[$Project::SERVER2_ConnectionString] 
: ( @[$Project::Parameter] == "SERVER3" ? @[$Project::SERVER3_ConnectionString]  
: ""))

然后单击 OLEDB 连接管理器,按 F4 显示属性选项卡,转到表达式,Select ConnectionString 属性 并使用以下命令表达式:

@[User::ConnectionSting]

然后单击数据流任务和使用连接的任务并将 Delay Validation 属性 设置为 True

使用表达式任务

您可以使用相同的方法,但不是将 @[User::ConnectionSting] 计算为表达式,而是在包开头添加表达式任务并使用以下表达式:

@[User::ConnectionSting] = (@[$Project::Parameter] == "SERVER1" ? 
@[$Project::SERVER1_ConnectionString] : ( @[$Project::Parameter] == "SERVER2" ? @[$Project::SERVER2_ConnectionString] : ( @[$Project::Parameter] == "SERVER3" ? @[$Project::SERVER3_ConnectionString] : "")))