Sql 如果不使用ssis中的每个循环容器,我必须转储一个包含多个文件的文件夹
有一个文件夹包含4个csv文件,我必须将其转储到sql server,而不使用foreach循环容器。如何做到这一点?您可以通过脚本任务来完成Sql 如果不使用ssis中的每个循环容器,我必须转储一个包含多个文件的文件夹,sql,sql-server,ssis,etl,Sql,Sql Server,Ssis,Etl,有一个文件夹包含4个csv文件,我必须将其转储到sql server,而不使用foreach循环容器。如何做到这一点?您可以通过脚本任务来完成 脚本任务将使用文件系统对象循环遍历文件夹中的文件,逐行读取它们,然后将行插入数据库。最简单的答案。为每个csv文件创建数据流 我的猜测是,如果不使用foreach,则文件不相同。解决方案 最简单的方法是使用执行sql任务将这些文件导入sql,但首先应该使用脚本任务构建整个sql命令 只需按照本文了解有关将csv导入SQL的更多信息: 例子 假设目录
脚本任务将使用文件系统对象循环遍历文件夹中的文件,逐行读取它们,然后将行插入数据库。最简单的答案。为每个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))
@[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(选择源类型=变量)文件的名称和数量是否总是相同?为什么不能使用每个循环,麻烦告诉我?因此,我们可以更好地了解可能的解决方案。文件夹中的文件可能会根据每天的情况而更改。原因-没有具体说明,但有另一种方法可以使用脚本任务完成此任务!但我不知道该怎么做@PujaMishra thx感谢您接受我的答案,阅读下面的文章可以了解更多关于接受和投票的答案。并获得一个知情的徽章。必须对有用的答案进行投票表决。在这个问题中,提供的3个答案是有用的,即使它们不详细,也必须进行投票表决。文件是相同的,有另一种方法可以通过使用脚本任务来处理此问题。为每个csv创建DFT,这不是一个好方法,如果我们有这么多文件,它会非常长。@PujaMishra为什么接受这个答案如果它不能解决您的问题,您必须接受一个解决您问题的答案。此外,这不是答案,它必须是一个注释:)@PujaMishra,不为每个循环容器使用SSI与使用脚本任务循环/读取每个文件相比有什么好处?@Wendy我认为这个问题是学术性的。对我来说,这听起来像是家庭作业。如果文件存在,脚本任务在处理上会更好。假设您等待10个文件,只有当所有文件到达时,才开始加载。数据流可以更好地加载数据。