我需要解决我正在处理的任务。 我需要将多个CSV文件加载到sql server表中。 所有CSV都具有相同的结构。
CSV的源位于sql server表中。
SOURCE_TABLE结构。
ID -> Primary Key - IDENTITY
Path -> Varchar(100)
Source_Table数据
ID Path
1 c:\1.csv
2 c:\2.csv
3 c:\x.csv
.
.
.
.
Target_Table结构(此表中没有主键)。
ID - INT -> Foreign key from Source Table. (This is NOT primary key)
Date - Today Date&Time
1 --> All 1 through 5 are headers from CSV file. basically they are the contents from the csv file
2
3
4
5
目标表具有 TARGET_TABLE
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
以此类推...
TARGE_TABLE上的ID必须与SOURCE TABLE上的ID匹配
感谢您的帮助。
答案 0 :(得分:2)
有关如何完成此操作的概述如下。假设您的问题表明所有CSV文件都具有相同的定义,则本示例将按照以下假设进行操作,并且目标表也包含具有相应的相应数据类型的列。
ID
。将第二个变量设置为字符串数据类型,并将其命名为FilePath
或类似名称。对象数据类型将用于第三个变量,并且可以命名为FileList
。F4
),找到Expressions
字段,然后按其旁边的省略号。在出现的窗口中,选择ConnectionString
属性,然后选择创建的FilePath
字符串变量。如果还没有,请为目标表所在的数据库创建一个OLE DB连接管理器。SELECT
命令,该命令按此顺序从源表返回ID和path列。在任务编辑器上,为Full Result Set
属性选择ResultType
选项。在“结果集”窗格上的“结果名称”列中输入0,然后在“变量名称”字段中添加对象变量(FileList
)。Foreach ADO Enumerator
选项。在“ ADO对象源变量”字段中,选择FileList
对象变量。在“变量映射”选项卡上,在索引0处添加int变量(ID
),在索引1处添加字符串FilePath
变量。这会将行列从对象变量的当前迭代映射到其他列变量。尽管此命令与SELECT
语句使用相同的顺序,即ID后跟路径列,但可以根据需要进行切换。ID
变量设置为具有int(DT_I4
)数据类型的表达式。对于示例中目标表的datetime列,我假设您要导入文件的日期和时间。为此,在带有GETDATE()
表达式的派生列转换上添加另一个输出列,以返回导入的日期和时间。这将具有DT_DBTIMESTAMP
数据类型,该数据类型与SQL Server datetime日期类型相对应。如果此数据类型不同,请参见SSIS data type documentation中的映射表。有用的链接