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