Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/77.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 如果不使用ssis中的每个循环容器,我必须转储一个包含多个文件的文件夹_Sql_Sql Server_Ssis_Etl - Fatal编程技术网

Sql 如果不使用ssis中的每个循环容器,我必须转储一个包含多个文件的文件夹

Sql 如果不使用ssis中的每个循环容器,我必须转储一个包含多个文件的文件夹,sql,sql-server,ssis,etl,Sql,Sql Server,Ssis,Etl,有一个文件夹包含4个csv文件,我必须将其转储到sql server,而不使用foreach循环容器。如何做到这一点?您可以通过脚本任务来完成 脚本任务将使用文件系统对象循环遍历文件夹中的文件,逐行读取它们,然后将行插入数据库。最简单的答案。为每个csv文件创建数据流 我的猜测是,如果不使用foreach,则文件不相同。解决方案 最简单的方法是使用执行sql任务将这些文件导入sql,但首先应该使用脚本任务构建整个sql命令 只需按照本文了解有关将csv导入SQL的更多信息: 例子 假设目录

有一个文件夹包含4个csv文件,我必须将其转储到sql server,而不使用foreach循环容器。如何做到这一点?

您可以通过脚本任务来完成


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

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

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

解决方案 最简单的方法是使用
执行sql任务
将这些文件导入sql,但首先应该使用
脚本任务
构建整个sql命令

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

例子 假设目录
C:\New\
中有以下4个平面文件,结构如下:

Col1,Col2,Col3
bla,bla,bla
bla,bla,bla
  • 首先,我们必须添加一个
    executesql任务来创建Sql表

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

  • 添加脚本任务并选择
    @[User::strQuery]
    作为读写变量
  • 在脚本任务中,编写以下代码:

    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
    
  • 添加
    执行Sql任务
    并将
    @[User::strQuery]
    用作SqlCommand(选择源类型=变量)

  • 屏幕截图

    首先执行Sql任务

    脚本任务

    第二个执行Sql任务

    整套


    文件的名称和数量是否总是相同?为什么不能使用每个循环,麻烦告诉我?因此,我们可以更好地了解可能的解决方案。文件夹中的文件可能会根据每天的情况而更改。原因-没有具体说明,但有另一种方法可以使用脚本任务完成此任务!但我不知道该怎么做@PujaMishra thx感谢您接受我的答案,阅读下面的文章可以了解更多关于接受和投票的答案。并获得一个知情的徽章。必须对有用的答案进行投票表决。在这个问题中,提供的3个答案是有用的,即使它们不详细,也必须进行投票表决。文件是相同的,有另一种方法可以通过使用脚本任务来处理此问题。为每个csv创建DFT,这不是一个好方法,如果我们有这么多文件,它会非常长。@PujaMishra为什么接受这个答案如果它不能解决您的问题,您必须接受一个解决您问题的答案。此外,这不是答案,它必须是一个注释:)@PujaMishra,不为每个循环容器使用SSI与使用脚本任务循环/读取每个文件相比有什么好处?@Wendy我认为这个问题是学术性的。对我来说,这听起来像是家庭作业。如果文件存在,脚本任务在处理上会更好。假设您等待10个文件,只有当所有文件到达时,才开始加载。数据流可以更好地加载数据。