0

我有一个 SSIS 项目(Visual Studio 2019 - 项目部署模型),其中包含 100 个 SSIS 包。

每个包的名称结构是TableName _Table.dtsx (例如: 如果我的表名是Employees,那么包名就是:Employees_Table.dtsx)。

每个 SSIS 包都有 2 个变量

@[User::TableName]

@[User::TableColumn]

具有硬编码的值,

以及使用上述变量值创建查询的变量(表达式评估)

@[User::Logging_sql_statement] = 

    "Insert into dbo.Log_Table (table_name,delta_column_name,start_time) 
    values ('" + @[User::TableName] + "','"+ @[User::TableColumn] + "','"+ (DT_WSTR, 50) (DT_DBTIMESTAMP) @[System::StartTime] + "')"

我的问题如下: 最近我们对我们使用的 SSIS 日志记录机制进行了一些更改,所以我不得不去每个 100 个 SSIS 包的 SSIS 包并修改@[User::Logging_sql_statement]变量处的表达式。

因此,为了避免将来发生新更改时必须修改 100 SSIS,我想知道是否有一种方法可以将表达式主体保存到项目参数中,然后将其值作为表达式评估为@[User::Logging_sql_statement]每个 SSIS 包中的变量。

在上述情况下,我以后只需要修改参数的值。

所以我创建了一个项目参数并将其值硬编码如下:

@[$Project::Parameter] = 
"Insert into dbo.Log_Table (table_name,delta_column_name,start_time) 
values ('" + @[User::TableName] + "','"+ @[User::TableColumn] + "','"+ (DT_WSTR, 50) (DT_DBTIMESTAMP) @[System::StartTime] + "')"

然后我去了 SSIS Packages 并在表达式生成器中执行了以下操作:

@[User::Logging_sql_statement] = @[$Project::Parameter]

但我没有得到值的表达式评估,而是@[$Project::Parameter]只得到它的值。

例如:

在名称为Employees_Table.dtsx 和变量(带有硬编码值)的 SSIS 包中

@[User::TableName] = Employees
@[User::TableColumn] = EmployeeName

我想要以下

@[User::Logging_sql_statement] = Expression Evaluation(@[$Project::Parameter]) 

给出以下值作为结果:

Insert into dbo.Log_Table (table_name,delta_column_name,start_time) 
values ('Employees','EmployeeName','yyyy-mm-dd hh:mm:ss')

而不是上面的,我得到

Insert into dbo.Log_Table (table_name,delta_column_name,start_time) 
values ('" + @[User::TableName] + "','"+ @[User::TableColumn] + "','"+ (DT_WSTR, 50) (DT_DBTIMESTAMP) @[System::StartTime] + "')

有没有办法做到这一点?

4

1 回答 1

0

据我所知,您不能对项目参数使用表达式,因此,您在项目参数值中编写的所有内容都显示在您使用的包参数中。

于 2021-08-21T04:19:15.547 回答