我正在通过五十个或更多Excel文件进行Excel循环.循环遍历每个Excel文件,抓取所有数据并将其输入数据库而不会出错.这是将延迟验证设置为true的典型过程,并确保Excel连接的表达式是一个EFile被设置为空的字符串变量(在循环中).
什么不起作用:尝试将Excel文件的名称输入到数据库中.
已经尝试了什么(编辑; SO改变了我的2比1 - 不知道为什么):
在Excel文件和数据库输入之间添加派生列,并使用EFile表达式添加列(因此在派生列中的表达式下,它将是@ [User :: EFile]).并添加空.但是,这并没有输入任何空白(没有).
一个建议是添加一个ANOTHER字符串变量并将其属性EvaluateAsExpression设置为True并将Expression设置为EFile变量(@ [User :: EFile]).有趣的是,这会做同样的事情 - 在数据库中输入一个空白.
博客上有很多人声称他们可以做到这一点,但我还没有看到一个人真正解决这个问题(我有一个博客,当我得到答案时,我肯定会向人们展示如何做到这一点,因为到目前为止,其他人已经堕落了短).如何获取Excel文件的名称并在循环期间将其输入数据库?
补充:忘了添加,没有脚本; 声称可以在没有它们的情况下完成,所以我希望看到没有它们的解决方案.
注意:我已经能够从Excel文件中导入数据 - 这很简单(请参阅我的GitHub帐户,因为我有两个不同的项目用于导入各种txt,csv,xls,xlsx数据).我也试图将正在导入的文件的实际名称也导入到数据库中.因此,如果有五十个Excel文件以及每个文件中的数据,则数据库将包含五十个文件名以及该数据(因此,如果每个文件具有1000行数据,则每1000行也将具有该文件的名称他们来自他们旁边作为一个额外的专栏).这一点似乎引起了很多混乱,因为人们认为我在文件中导入数据时遇到问题 - NOPE,请参阅我的GitHub; 再说那很容易.这是需要导入的FILENAME.
测试包:https://github.com/tmmtsmith/SSISLoopWithFileName
解决方案: @jaimet指出Derived Column必须是@ [User :: CurrentFile](参见测试包).当我第一次运行包时,我的数据库中仍然有一个空白值.但是当我们最初建立连接时,我们确实将它指向一个实际的文件(我称之为"欺骗包"),然后将连接后的表达式更改为@ [User :: CurrentFile],这是空白的.派生列使用变量@ [User :: CurrentFile],显示一个0的字符串.因此,我删除了派生列,将完整的文件路径和名称放在变量中,然后将变量添加到派生列(让它认为字符串长度为91个字符),然后返回并将变量设置为空(英语老师现在就讨厌那些THEN).当我运行包时,它输入了完整的文件路径.也许,就像连接一样,它需要最初认为文件存在才能输入全部字符?
感谢所有的帮助.
小智 5
问题是因为变量中的空白值@[User::FileNameInput]导致SSIS包假定在派生列转换中此变量的值始终为零长度.

将Derived列转换上的表达式更改@[User::FileNameInput]为(DT_STR, 2000, 1252)@[User::FileNameInput].
键入转换派生列以2000将列长度设置为该最大值.该值1252表示代码页.我假设您正在使用ANSI代码页.我2000从表定义中获取了值,因为FilePath列具有变量VARCHAR(2000).如果列数据类型是NVARCHAR(2000),则表达式为(DT_WSTR, 2000)@[User::FileNameInput]

| 归档时间: |
|
| 查看次数: |
8401 次 |
| 最近记录: |