Sql server SSIS表达式中的Case或if语句

Sql server SSIS表达式中的Case或if语句,sql-server,parameters,ssis,expression,ssis-2012,Sql Server,Parameters,Ssis,Expression,Ssis 2012,我想在SSIS中使用一个项目参数来更改数据源连接 我正试图在连接属性中编写一个表达式,但我遇到了一些问题。我希望能够计算几个不同的值,如果为true,则返回不同的值 这是我的 @[$Project::Parameter] == "SERVER1" ? @[$Project::SERVER1_ConnectionString] : ( @[$Project::Parameter] == "SERVER2" ? @[$Project::SERVER2_ConnectionString] : (

我想在SSIS中使用一个项目参数来更改数据源连接

我正试图在连接属性中编写一个表达式,但我遇到了一些问题。我希望能够计算几个不同的值,如果为true,则返回不同的值

这是我的

@[$Project::Parameter] == "SERVER1" ? @[$Project::SERVER1_ConnectionString]  
: ( @[$Project::Parameter] == "SERVER2" ? @[$Project::SERVER2_ConnectionString] 
: ( @[$Project::Parameter] == "SERVER3" ? @[$Project::SERVER3_ConnectionString]  
: "Unknown Server"))
我曾尝试将其他服务器添加到此代码中,但我一定不了解如何评估其他结果和设置其他值

基本上,我希望这样做

如果
Parameter=SERVER1
则给我
SERVER1\u ConnectionString
,如果
Parameter=SERVER2
,则给我
SERVER2\u ConnectionString
,依此类推


编辑:语法正确,但我的问题是键入了我的项目参数

将变量计算为表达式

最简单的方法是添加String类型的变量
@[User::ConnectionSting]
,选择将此变量作为表达式计算,然后使用以下表达式:

@[$Project::Parameter] == "SERVER1" ? @[$Project::SERVER1_ConnectionString]  
: ( @[$Project::Parameter] == "SERVER2" ? @[$Project::SERVER2_ConnectionString] 
: ( @[$Project::Parameter] == "SERVER3" ? @[$Project::SERVER3_ConnectionString]  
: ""))
@[User::ConnectionSting]
@[User::ConnectionSting] = (@[$Project::Parameter] == "SERVER1" ? 
@[$Project::SERVER1_ConnectionString] : ( @[$Project::Parameter] == "SERVER2" ? @[$Project::SERVER2_ConnectionString] : ( @[$Project::Parameter] == "SERVER3" ? @[$Project::SERVER3_ConnectionString] : "")))
然后单击OLEDB连接管理器,按F4键以显示属性选项卡,转到表达式,选择ConnectionString属性并使用以下表达式:

@[$Project::Parameter] == "SERVER1" ? @[$Project::SERVER1_ConnectionString]  
: ( @[$Project::Parameter] == "SERVER2" ? @[$Project::SERVER2_ConnectionString] 
: ( @[$Project::Parameter] == "SERVER3" ? @[$Project::SERVER3_ConnectionString]  
: ""))
@[User::ConnectionSting]
@[User::ConnectionSting] = (@[$Project::Parameter] == "SERVER1" ? 
@[$Project::SERVER1_ConnectionString] : ( @[$Project::Parameter] == "SERVER2" ? @[$Project::SERVER2_ConnectionString] : ( @[$Project::Parameter] == "SERVER3" ? @[$Project::SERVER3_ConnectionString] : "")))
然后单击数据流任务和使用连接的任务,并将
延迟验证
属性设置为
True

使用表达任务

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

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

哈迪,我将给你答案,因为问题是我有一个名为错误的参数。似乎总是有一些简单的事情阻碍着我:)