我有 2 张 excel 文件。我需要做什么:
- 从第一张纸上读取 Id(只有一行,一列)
- 检查db中是否有该id的记录(图1)
如果满足先前的条件,那么我需要从第二张表中读取数据(多行)
将#3 中的数据和#1 中的 id 传递到存储过程并执行它。
该图使用用户数据读取第二张表并传递给存储过程。
但我不明白如何将它组合成一个方案以使项目 1-4 工作。
我有 2 张 excel 文件。我需要做什么:
如果满足先前的条件,那么我需要从第二张表中读取数据(多行)
将#3 中的数据和#1 中的 id 传递到存储过程并执行它。
该图使用用户数据读取第二张表并传递给存储过程。
但我不明白如何将它组合成一个方案以使项目 1-4 工作。
所以...如果我认为我正确理解了您的问题...您想要做的是将该 Excel ID 值存储在一个变量中,然后将其作为派生列添加到第 2 部分中的数据流中。
所以你的包应该是这样的:
执行 SQL 任务
ConnectionType EXCEL,Connection是你的Excel连接,Result Set是“单行”,SQL Statement是“select top 1 * from [SheetNameWithDataSourceIDGoesHere$]”。结果集将结果名称“0”映射到变量名称(我们称其为 User::DataSourceID。)
数据流任务
资料来源:Excel工作表
派生列:称其为 DataSourceID,值为 User::DataSourceID。
查找:针对您查找数据源的任何位置。没有匹配输出会直接进入您的数据转换和存储过程。
如果你想变得花哨,你可以在第一个之后包含第二个执行 SQL 任务,使用SQLStatementSource的表达式来针对包含数据源 ID 的数据库表运行。
就像是:
"select count(1) as DataSourceIDExists from DATASOURCELOOKUPTABLE where DataSourceID = " + (DT_WSTR,50)@User::DataSourceID
然后将其映射到“单行”结果集,结果名称“0”映射到User::DataSourceIDExists。然后在该任务之后,使用带有表达式的优先约束
(User::DataSourceIDExists == 0)
确定您是否甚至进入数据流任务以加载 Excel 数据。因为听起来你还不是一个全面的 SSIS 专家,所以这可能是一个很好的学习机会。