Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/67.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
SSIS-加载位于SQL Server表中的CSV文件_Sql_Sql Server_Csv_Ssis - Fatal编程技术网

SSIS-加载位于SQL Server表中的CSV文件

SSIS-加载位于SQL Server表中的CSV文件,sql,sql-server,csv,ssis,Sql,Sql Server,Csv,Ssis,我需要解决我正在做的任务。 我需要将多个CSV文件加载到sql server表中。 所有CSV都具有相同的结构 ID -> Primary Key - IDENTITY Path -> Varchar(100) CSV的源位于sql server表中 源表结构 ID -> Primary Key - IDENTITY Path -> Varchar(100) 源表数据 ID Path 1 c:\1.csv 2 c:\2.csv 3 c:\x.csv .

我需要解决我正在做的任务。 我需要将多个CSV文件加载到sql server表中。 所有CSV都具有相同的结构

ID -> Primary Key - IDENTITY
Path -> Varchar(100)
CSV的源位于sql server表中

源表结构

ID -> Primary Key - IDENTITY
Path -> Varchar(100)
源表数据

ID  Path
1   c:\1.csv
2   c:\2.csv
3   c:\x.csv
.
.
.
.
目标_表结构(此表中没有主键)

目标表已被删除 目标表

ID      DateTime   <-and the columns from CSV file ->
1       Today      x  y  z  -> contents of c:\1.csv
1       Today      1  2  3  -> contents of c:\1.csv
1       Today      4  5  6  -> contents of c:\1.csv
1       Today      x  y  z  -> contents of c:\1.csv
2       today      sdf sdf sdf  -> contents of c:\2.csv
2       today      sdf sdf sdf  -> contents of c:\2.csv
2       today      sdf sdf sdf  -> contents of c:\2.csv
2       today      sdf sdf sdf  -> contents of c:\2.csv
2       today      sdf sdf sdf  -> contents of c:\2.csv
3       today      sdfs  sds  sdf  -> contents of c:\x.csv
3       today      sdfs  sds  sdf  -> contents of c:\x.csv
3       today      sdfs  sds  sdf  -> contents of c:\x.csv
3       today      sdfs  sds  sdf  -> contents of c:\x.csv
3       today      sdfs  sds  sdf  -> contents of c:\x.csv
ID日期时间
1今天x y z->c:\1.csv的内容
1今天1 2 3->c:\1.csv的内容
1今天4 5 6->c:\1.csv的内容
1今天x y z->c:\1.csv的内容
2今天的sdf sdf->c:\2.csv的内容
2今天的sdf sdf->c:\2.csv的内容
2今天的sdf sdf->c:\2.csv的内容
2今天的sdf sdf->c:\2.csv的内容
2今天的sdf sdf->c:\2.csv的内容
3今天sdfs sds sdf->c:\x.csv的内容
3今天sdfs sds sdf->c:\x.csv的内容
3今天sdfs sds sdf->c:\x.csv的内容
3今天sdfs sds sdf->c:\x.csv的内容
3今天sdfs sds sdf->c:\x.csv的内容
等等

TARGE_表上的ID必须与源表上的ID匹配


感谢您的帮助。

下面是如何完成此任务的概述。假设您的问题表明所有CSV文件共享相同的定义,本例采用以下假设,并且目标表也包含具有相应数据类型的列

  • 创建三个变量。第一个具有int数据类型,可以称为
    ID
    。将第二个变量设为字符串数据类型,并将其命名为
    FilePath
    或类似名称。对象数据类型将用于第三个变量,它可以命名为
    FileList
  • 使用任何源文件的定义创建平面文件连接管理器。由于它将用于加载多个文件,因此文件路径(连接字符串)需要是动态的。要执行此操作,请转到平面文件连接管理器属性(按
    F4
    ),找到
    表达式
    字段,然后按旁边的省略号。在出现的窗口中,选择
    ConnectionString
    属性,然后选择创建的
    FilePath
    字符串变量。如果还没有,还可以创建一个到目标表所在数据库的OLE DB连接管理器
  • 在控制流上添加执行SQL任务。对于SQL语句,输入一个
    SELECT
    命令,该命令按此顺序从源表返回ID和path列。在任务编辑器上,为
    ResultType
    属性选择
    Full Result Set
    选项。在“结果集”窗格的“结果名称”列中输入0,然后在“变量名称”字段中添加对象变量(
    FileList
  • 接下来,在executesql任务之后添加一个Foreach循环,并将其连接到它。为枚举器字段选择
    Foreach ADO枚举器
    选项。在ADO对象源变量字段中,选择
    文件列表
    对象变量。在变量映射选项卡上,在索引0处添加int变量(
    ID
    ),在索引1处添加string
    FilePath
    变量。这将把行的列从对象变量的当前迭代映射到其他变量。虽然这与
    SELECT
    语句的顺序相同,即ID后面跟path列,但如果需要,可以对其进行切换
  • 在Foreach循环内创建数据流任务。使用先前定义的平面文件连接管理器添加平面文件源。接下来添加一个派生列转换。在此基础上,添加两个额外的输出列。第一个输出列将是ID,并将int
    ID
    变量设置为具有int(
    DT_I4
    )数据类型的表达式。对于示例中目标表的datetime列,我假设您需要导入文件的日期和时间。为此,使用
    GETDATE()
    表达式在派生列转换上添加另一个输出列,以返回导入的日期和时间。这将具有与SQL Server日期时间类型相对应的
    DT_DBTIMESTAMP
    数据类型。如果此数据类型不同,请参阅中的映射表
  • 在派生列之后添加OLE DB目标。将目标表设置为目标,我建议使用Fast Load选项,该选项作为批量插入操作。在“映射”窗格上,将ID派生列与目标表的ID列相匹配,将datetime派生列与其关联的目标表的列相匹配,将平面文件源的其余输出列与目标表的相应列相匹配
有用链接


目标表的
ID
值是来自CSV文件的文件名,还是CSV文件中的数据?如果您发布了
Target_table
的实际表定义以及其中一个CSV文件的前几行,这将非常有用。源_table的ID为IDENTITY。目标_表的ID是源_表的ID。目标_表中的ID不是主键。请再次发布
目标_表
的实际表定义以及CSV文件中的一些示例行。记住——我们对你所做的事情远没有你熟悉。有关如何发布有效问题的更多指导,请参见和。@brian-我刚刚更新了问题。