如何将提取的文件名加载到SSIS中的sql server表中

时间:2012-01-16 09:07:10

标签: ssis

我在一个包含 eid,ename,country 字段的文件夹中有3个csv文件,我的5个csv文件名是test1_20120116_034512,test1_20120116_035512,test1_20120116_035812等。我的要求是我要采取最新的基于timne邮票和修改日期的文件,我已经完成了。现在我想将提取的文件名导入目标表..

我的目标表包含像

这样的字段

filepath,filename,eid,ename,country

我之前在同一个网站上发布过关于提取文件名的答案,现在我想将提取的FileName加载到目标表中

我的目标表应该输出为

C:/ source test1_20120116_035812 1234 tester USA

2 个答案:

答案 0 :(得分:5)

在DataFlow任务中,添加派生列转换。 CurrentFile的值将是文件的完全限定路径。由于您只需要文件名,我会在基础文件夹上使用替换函数,然后去除剩余的斜杠。这样做剥离文件扩展名,但您可以添加另一个对REPLACE的调用并替换空字符串

  • 派生列名称:filename
  • 派生专栏:
  • 表达:REPLACE(REPLACE(@[User::CurrentFile], @[User::RootFolder], ""), "\\", "")

以上预计它看起来像

  • CurrentFile =“C:\ source \ test1_20120116_035812.csv”
  • RootFolder =“C:\ source”

修改

我相信你已经采取了一些我没做过的事情。你应该看到关于可能的截断的警告,但是考虑到这个和前面的问题中讨论的值,我不相信表达式的4k限制会引起关注。

显示派生列

Derived columns

演示派生列确实有效

Data flow via derived column

我会给你+1提供我不知道的方法,但你仍然需要添加一个派生列来匹配你提供的格式(基本路径名)

Flat File custom properties

自定义属性提供完整路径。使用上述REPLACE部分删除路径信息,但使用[FileName]列代替@[User::CurrentFile]

Full path provided

答案 1 :(得分:3)

我试图通过Billinkc给出的程序获取文件名,但是由于截断错误,它引发了我的错误,说明文件名列失败了。

我是如何尝试不同的方法将文件名加载到表中。

我用过的步骤
1.右键单击平面文件Source并单击show advanced edito for Flat file
2.选择组件属性选项卡
3.在Custom Properties部分里面--->它有一个属性 FileNameColumnName
我已将Filename分配给该列属性,如

FileNameColumnName ----> FileName 就是这样,我能够将文件名放到我的目标表中..