【发布时间】:2020-11-17 03:17:43
【问题描述】:
问题陈述:要求很简单,就是我们有一个平面文件(基本上是csv),我们需要将它加载到Sql Server 数据库中的一个表中。当我们必须派生一个新列(平面文件中不存在)并将其与文件中的其余列一起填充时,就会出现问题。
新列的推导逻辑是——求“TransactionDate”的最大日期。
整个练习将在SSIS 中执行,我们希望通过使用DataFlowTask 来完成它,但一直坚持如何派生新列,然后将其添加到目标流中。
想法:
- 使用
DataFlowTask读取文件,然后将其存储在recordset中,这样在ControlFlow中我们将使用ScriptTask将其读取为DataTable并使用LINQ排序来确定最大值列并将其推送到另一个DataFlow以供Sql table使用(但我想这需要在我会避免的数据库中创建tabletype) - 在
DataFlowTask本身中执行整个操作,我们将需要Asynchronous transformation(获取所有数据并找出最大值)
我们在这里有点想不通,任何线索都将不胜感激,如果在这方面需要任何进一步的信息,请告诉我们。
【问题讨论】:
-
所以从 CSV 加载的每条记录在加载到目标表时都应该具有相同的 MAX Transaction 日期?
-
@AaronHughes - 这是正确的,只需要为批次导出一次 TransactionDate 的最大值,并且在加载到表时该特定批次的最大值是相同的。
-
为什么不先加载批处理,然后运行执行 SQL 任务来执行更新?没有什么说你不能在加载后修改表中的数据。
-
你不能限制你的更新语句只更新 TransactionDate 为空的地方吗?我认为您可能在这里过度设计您的解决方案。当然,您可以使用脚本任务并读取记录集,将最大值保存到变量中并将所有内容写入表中。但是你应该吗?运行数据流然后执行更新不是更容易、更容易理解吗?
-
当然,没问题。我发布了一个解决方案,以便您可以将其标记为已关闭,哈哈。
标签: c# sql-server ssis