问题:
我的excel连接管理器文件路径没有被通过Foreach文件枚举器传入的更新变量更新。
功能要求:
我在目录中有一组excel文件需要迭代并导入到SQL Server数据库中。
这些文件的第一个限制是其中一个列的每个单元格中最多包含3000个字符(吹出标准的255个字符最大值)。
第二个限制是我在这里有一个限制,我不能采取正常路径并更新注册表以采样更多行(我通常会创建一个带有该列前几行的引物文件拥有3000个字符。)
解决方案大纲:
原型:
为了对抗> 255个char单元并禁止编辑注册表,我选择使用利用Excel连接的脚本任务。
参考:
https://egilhansen.com/2015/07/28/ssis-solution-excel-data-source-text-truncation-column-more-than-255-characters/
我有一个DataFlow任务使用此脚本导入一个文件,因此脚本是健全的。
仅供参考,数据流任务中只有3个数据流项: 1)脚本任务以摄取excel文件的内容 2)在枚举的filstring中添加的派生列 3)将这些加载到数据库中的ole db
文件夹解决方案中的所有文件:
然后我设置了一个Foreach循环容器并将脚本任务复制到其中。
我将Excel连接的Expression的属性配置为具有filepath属性,并将foreach文件枚举器映射到的文件名变量映射到它。
最后,我在flow task,excel连接和Excel连接管理器的属性控件上设置了Delayvalidation。
旁注:在Foreach文件枚举器中,派生列实际上正确地添加了枚举文件名 - >它只是不同时更新的excel连接字符串。
结束评论: 我搞砸了将excel文件表达式更改为ConnetionString并添加到另一个变量和脚本任务中以在foreach循环中更改它(利用枚举文件变量),但是ConnetionString变量没有更新......我现在想知道是否需要在现有foreach循环中嵌套foreach循环容器以更新excel连接字符串变量,然后再继续执行主脚本
答案 0 :(得分:0)
我还没有声誉可以评论,我道歉。我在你的上一条评论中看到你说连接字符串没有更新。这是我在SSIS之前遇到的一个问题,它不会在组件内部分配变量的值。这意味着如果你在循环中它不会分配值,直到它完成循环。这也适用于数据流。解决它的方法是先设置该值,就像你在嵌套循环中建议的那样。如果您不介意,我们可以将其用作评论,主要是为了帮助您解决问题。