在不使用 for each loop container in ssis 的情况下,我必须转储一个包含多个文件的文件夹

Without using for each loop container in ssis , I have to dump one folder that contains several files in it

有一个文件夹包含 4 个 csv 文件,我必须在不使用 foreach 循环容器的情况下将其转储到 sql 服务器。怎么做?

您可以使用脚本任务来完成。

脚本任务将使用文件系统对象遍历文件夹中的文件,逐行读取它们,并将行插入数据库。

最简单的答案。为每个 csv 文件创建数据流。

我的猜测是,如果您不使用 foreach,则文件不相同。

解决方案

最简单的方法是使用 Execute sql Task 将这些文件导入 sql,但首先您应该使用 Script Task[=26 构建整个 sql 命令=]

只需按照本文了解有关将 csv 导入 SQL 的更多信息:

例子

假设我们在目录 C:\New\ 中有以下 4 个具有以下结构的平面文件:

Col1,Col2,Col3
bla,bla,bla
bla,bla,bla
  1. 首先我们要添加一个Execute Sql Task来创建SqlTable

    CREATE TABLE TBLTEMP(COL1 VARCHAR(50),
                     COL2 VARCHAR(50),
                     COL3 VARCHAR(50))
    
  2. 其次我们必须添加字符串类型的变量@[User::strQuery]

  3. 添加脚本任务和 select @[User::strQuery] 作为读写变量
  4. 在脚本任务中编写以下代码:

    Public Sub Main()
    
        Dim strQuery As String = ""
    
        For Each strFile As String In IO.Directory.GetFiles("C:\New", "*.csv", IO.SearchOption.TopDirectoryOnly)
    
            strQuery &= vbNewLine &
                "BULK INSERT [TBLTEMP] " & vbNewLine &
                " FROM '" & strFile & "' WITH" & vbNewLine &
                "(FIELDTERMINATOR = ','," & vbNewLine &
                "ROWTERMINATOR = '\n' ) " & vbNewLine &
                "GO" & vbNewLine
    
        Next
    
    
        Dts.Variables.Item("User::strQuery").Value = strQuery
    
        Dts.TaskResult = ScriptResults.Success
    End Sub
    
  5. 添加一个Execute Sql Task并使用@[User::strQuery]作为Sql命令(Select源类型=变量)

屏幕截图

首先执行Sql任务

脚本任务

第二次执行Sql任务

整包