SSIS-加载平面文件,将文件名保存到SQL表

SSIS-加载平面文件,将文件名保存到SQL表,ssis,Ssis,我有一项复杂的任务需要完成。它以前工作得很好,因为只有一个文件,但现在正在改变。每个文件都有一个长行,这是第一个批量插入到临时表中的行。从这里开始,我应该将文件名保存到另一个表中,然后插入分段表数据的各个部分。这不是问题所在。我们可能一次只加载一个文件,甚至多个文件。需要做的是: 第一个SSIS任务是执行一些检查的脚本任务。第二个任务准备文件列表。 暂存表被截断。 第三个任务当前是Foreach循环容器任务,它使用文件列表中的文件并对其进行处理: 使用大容量插入任务将文件加载到表中。 文件名需要

我有一项复杂的任务需要完成。它以前工作得很好,因为只有一个文件,但现在正在改变。每个文件都有一个长行,这是第一个批量插入到临时表中的行。从这里开始,我应该将文件名保存到另一个表中,然后插入分段表数据的各个部分。这不是问题所在。我们可能一次只加载一个文件,甚至多个文件。需要做的是:

第一个SSIS任务是执行一些检查的脚本任务。第二个任务准备文件列表。 暂存表被截断。 第三个任务当前是Foreach循环容器任务,它使用文件列表中的文件并对其进行处理: 使用大容量插入任务将文件加载到表中。 文件名需要作为变量传递给下一个进程。这以前是用C任务完成的,但现在有点复杂了,因为可能有多个文件,每个文件名都需要单独保存。 最后一个任务是SQL任务,它以文件名作为输入变量执行存储过程。 我的问题是以前只有一个文件。这很容易。现在最好的办法是什么

在导入文件的数据流任务中,创建一个驱动列。用filename的系统变量值填充它。将文件名加载到同一个表中

使用执行SQL任务将文件名的distinc列表检索到记录集对象类型变量中

用于每个循环容器循环记录集。将代码放入容器中。代码将从循环中接收文件名作为变量值,并处理该文件

在For Each循环容器中使用Execute SQL task调用SP.Pass filename作为参数,如:

执行sp_MyCode param1、param2、

在哪里?将以字符串形式传递文件名输入

编辑

要建立平面文件连接,请选择由变量指定的文件-使用平面文件连接的Connection String属性

选择FF连接,单击鼠标右键并选择“属性”

单击表达式的空字段,然后单击出现的省略号。使用表达式,您可以使用变量定义其中列出的对象的每个属性。SSI中的许多对象可以指定表达式

添加一个表达式,选择连接字符串属性,并定义一个表达式,该表达式具有文件的绝对路径。为了安全起见,它也可以是UNC路径


所有这些都可以在脚本任务本身中使用C代码来完成。您可以逐个循环浏览所有文件,并针对每个文件: 1.将数据大容量复制到登台 2.将文件名插入到另一个表中


您可以根据您的需求和所需的执行流程修改逻辑。

将一个列添加到暂存表-FileName中 使用表达式捕获SSIS变量中的文件名,然后在每个循环中运行如下内容:

UPDATE StagingTable SET FileName=? WHERE FileName IS NULL

你为什么和C混在一起?从你的描述来看,这完全没有必要。

好的,我已经完成了导数专栏。我可以获取文件名,将其保存到列中,等等。我正在努力使用现在用于数据流任务的平面文件部分的文件连接管理器。是否有任何方法可以使用变量告诉它在完成当前文件后转到下一个文件?也就是说,目前只处理一个表似乎是硬编码的,我不知道如何更正。处理一个文件,我的意思是说,对不起!