我需要完成一项复杂的任务。之前它运作良好,因为只有一个文件,但现在正在改变。每个文件都有一个长行,首先是批量插入到临时表中。从这里开始,我应该将文件名保存到另一个表中,然后插入临时表数据的分解部分。这不是问题。我们可能只有一个文件甚至多个文件一次加载。需要做的是:
我的问题是它之前只有一个文件。这很容易。现在最好的办法是什么?
答案 0 :(得分:1)
在导入文件的数据流任务中创建一个来自列的列。使用filename的系统变量值填充它。将文件名加载到同一个表中。
使用执行SQL任务将文件名的distinc列表检索到记录集(对象类型变量)。
使用For Each Loop容器循环记录集。将代码放在容器中。代码将从循环中接收文件名作为变量的值并处理文件。
使用For Each Loop容器中的执行SQL任务来调用SP。将filename作为参数传递,如:
执行sp_MyCode param1,param2,?
在哪里?将文件名INPUT作为字符串传递
修改强>
使平面文件连接获取变量指定的文件 - 使用平面文件连接的连接字符串属性
选择FF连接,右键单击并选择属性
单击表达式的空白字段,然后单击出现的省略号。使用表达式,您可以使用变量定义其中列出的对象的每个属性。 SSIS中的许多对象都可以指定表达式。
添加一个Expression,选择Connection String Property并定义一个带有文件绝对路径的表达式(只是为了安全起见,它也可以是UNC路径)。
答案 1 :(得分:0)
以上所有内容都可以使用脚本任务本身的C#代码完成。您可以逐个遍历所有文件并为每个文件循环: 1.批量将数据复制到分段 2.将文件名插入另一个表
您可以根据您的要求和所需的执行流程修改逻辑。
答案 2 :(得分:0)
将一个colunm添加到您的临时表 - FileName 在SSIS变量中捕获文件名(使用表达式),然后在每个循环中运行类似的东西:
UPDATE StagingTable SET FileName=? WHERE FileName IS NULL
你为什么要搞乱C#?根据你的描述,这是完全没必要的。