我被以上内容卡住了。
概述
我创建了一个SSIS包,它在excel文件的文件夹中循环,从这些文件中提取数据,并插入到SQL表中。
每天都会创建一个新的文件夹,如2020年3月30日、2020年3日31日和2020年4月1日等。
我的包处理了这个问题,并且从头到尾都运行得很顺利。
但是,我希望通过Derived列将文件名添加到目标SQL表中的每组数据中。
这就是我的问题所在。
我可以添加完整的文件路径和名称,但我似乎无法单独提取文件名。
环境
我创建了一个ForEachLoop容器,其中我将枚举器设置为"Foreach File Enumerator",添加到文件夹的完整路径中,并将文件设置为">.xl">
检索文件名设置为"完全合格">
在变量映射中,我添加了一个名为strFullFilePath的变量,索引为0。
然后我添加了数据流,最近添加了脚本任务。
在数据流中,我拖动了一个Excel源。
我通过输入要加载的一个文件的完整路径和文件名创建了Excel连接管理器。
我从变量中将数据访问模式设置为SQL命令。
保存后,我将Excel连接管理器属性设置为在运行时将动态文件名传递给Excel连接字符串,方法是将@[User::strFullFilePath]变量添加到ExcelFilePath表达式中。
最后,我为目标表创建了一个OLE DB SQL SERVER目标,并映射了字段。
该包运行时没有出现问题,并加载了所有文件,直到我添加了脚本任务并遵循了我在网上看到的一些建议。
脚本任务当前配置如下:-
Microsoft Visual Basic 2017
入口点:-主
ReadWriteVariables:-用户::strFullFilePath
当你编辑脚本时,我的代码是:-
公用Sub-Main((
Dts.Variables("strFullFilePath").Value = System.IO.Path.GetFileName(Dts.Variables("strFullFilePath").Value.ToString())
Dts.TaskResult = ScriptResults.Success
结束子
当我现在运行包时,脚本任务似乎执行正常,但主Excel文件加载失败,并显示消息"[Excel main Data Source[2]错误:无法从数据源检索列信息。请确保数据库中的目标表可用。">
我不确定,但看起来包现在认为文件路径是我们在For Each循环容器中输入的0。
我尝试了许多不同的场景,在脚本中的变量名之前加上"User::",还尝试了以下操作:-
Dts。变量("strFileName"(。值=系统。IO.Path.GetFileName(Dts.Variables("strFullFilePath"(.Value.ToString(((
但这只是给了我一个DTS脚本任务:运行时错误:调用的目标引发了异常。
我现在完全被难住了。
如有任何帮助/建议,我们将不胜感激。
问候,
NJC-
我想我可能已经解决了这个问题。
我在strFullFileName下的For Each循环容器中添加了一个变量strFileName,索引为1。
我已将VB脚本修改为:-
Dts.Variables("strFileName").Value = System.IO.Path.GetFileName(Dts.Variables("strFileName").Value.ToString())
现在我可以在DebugLocals窗口中看到文件名,并将结果发布到表中。