我想创建一个SSIS包来导入一些数据集文件,但是考虑到我似乎打砖了
每当我完成一小部分任务时,我需要退后一步并对我所做的事情进行健全性检查试图实现,如果你们有好心人可以建议SSIS是否可以解决这个问题,那么我会
欣赏它。
这是我今天早上的问题: -
debugging SSIS packages - debug.writeline
Changing an SSIS dts variables
我要做的是让一个For..Each容器枚举SQL Server上共享中的文件。对于每个
文件它发现脚本任务运行以检查文件名的各种属性,例如查找三个字母
代码,CCYYMM中的日期,其中包含的数据的名称,以及可选的一些注释。例如: -
ABC_201007_SalesData_ [可选评论在这里] .csv
我正在寻找使用正则表达式解析名称并将值设为' ABC ',' 201007 '和
变量中的' SalesData '。
如果不符合某些条件,我想将文件移动到错误文件夹: -
然后我想在查找表中查找字符代码,日期(或其中的一部分)和数据集名称
标记每个客户收到的文件的“核对清单”。
然后,根据清单中的条目,我想启动另一个SSIS包。
因此,例如,我可能会有一个名为'Checklist'的表,其中包含以下列: -
Client code Dataset SSIS_Package
ABC SalesData NorthSalesData.dtsx
DEF SalesData SouthSalesData.dtsx
如果有人有更好的方法来实现这一点,我有兴趣听到它。
提前致谢
答案 0 :(得分:3)
这是一个有趣的场景,应该相对容易处理。
首先,您选择的Foreach循环是一个很好的选择。您将使用Foreach文件枚举器。您可以将迭代的文件限制为CSV,这样就不必为以后的文件“过滤”。
Foreach文件枚举器将文件名(完整路径或文件名)放入变量 - 让我们称之为“FileName”。有(至少)两种方法可以解析 - 表达式或脚本任务。取决于哪一个你更舒服。无论哪种方式,你都需要创建三个变量来保存文件名的“部分” - 我将它们称为“FileCode”,“FileDate”和“FileDataset”。
要使用表达式执行此操作,需要将FileCode,FileDate和FileDataset上的EvaluateAsExpression属性设置为true。然后在表达式中,您需要使用FINDSTRING和SUBSTRING来根据需要创建FileName。表达式没有正则表达式功能。
要在脚本任务中执行此操作,请将FileName变量作为ReadOnly变量传递,将其他三个作为ReadWrite传递。您可以使用.Net的Regex功能,也可以手动使用IndexOf和Substring来获取所需内容。
答案 1 :(得分:2)
不幸的是,您刚刚错过了ForEach循环上的SQLLunch livemeeting:http://www.bidn.com/blogs/BradSchacht/ssis/812/sql-lunch-tomorrow
然而,他们正在录制会话。