我有一个 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] + "')
有没有办法做到这一点?