SSIS适用性

时间:2010-07-08 14:53:07

标签: sql-server sql-server-2005 ssis

我想创建一个SSIS包来导入一些数据集文件,但是考虑到我似乎打砖了

每当我完成一小部分任务时,我需要退后一步并对我所做的事情进行健全性检查

试图实现,如果你们有好心人可以建议SSIS是否可以解决这个问题,那么我会

欣赏它。

这是我今天早上的问题: -

debugging SSIS packages - debug.writeline

Changing an SSIS dts variables

我要做的是让一个For..Each容器枚举SQL Server上共享中的文件。对于每个

文件它发现脚本任务运行以检查文件名的各种属性,例如查找三个字母

代码,CCYYMM中的日期,其中包含的数据的名称,以及可选的一些注释。例如: -

  

ABC_201007_SalesData_ [可选评论在这里] .csv

我正在寻找使用正则表达式解析名称并将值设为' ABC ',' 201007 '和

变量中的

' SalesData '。

如果不符合某些条件,我想将文件移动到错误文件夹: -

  • 三个字符代码
  • 六个字符日期
  • 数据集名称(例如,SalesData,在此示例中)
  • CSV扩展程序

然后我想在查找表中查找字符代码,日期(或其中的一部分)和数据集名称

标记每个客户收到的文件的“核对清单”。

然后,根据清单中的条目,我想启动另一个SSIS包。

因此,例如,我可能会有一个名为'Checklist'的表,其中包含以下列: -

Client code       Dataset          SSIS_Package
    ABC           SalesData        NorthSalesData.dtsx
    DEF           SalesData        SouthSalesData.dtsx

如果有人有更好的方法来实现这一点,我有兴趣听到它。

提前致谢

2 个答案:

答案 0 :(得分:3)

这是一个有趣的场景,应该相对容易处理。

首先,您选择的Foreach循环是一个很好的选择。您将使用Foreach文件枚举器。您可以将迭代的文件限制为CSV,这样就不必为以后的文件“过滤”。

Foreach文件枚举器将文件名(完整路径或文件名)放入变量 - 让我们称之为“FileName”。有(至少)两种方法可以解析 - 表达式或脚本任务。取决于哪一个你更舒服。无论哪种方式,你都需要创建三个变量来保存文件名的“部分” - 我将它们称为“FileCode”,“FileDate”和“FileDataset”。

要使用表达式执行此操作,需要将FileCode,FileDate和FileDataset上的EvaluateAsExpression属性设置为true。然后在表达式中,您需要使用FINDSTRINGSUBSTRING来根据需要创建FileName。表达式没有正则表达式功能。

要在脚本任务中执行此操作,请将FileName变量作为ReadOnly变量传递,将其他三个作为ReadWrite传递。您可以使用.Net的Regex功能,也可以手动使用IndexOfSubstring来获取所需内容。

答案 1 :(得分:2)

不幸的是,您刚刚错过了ForEach循环上的SQLLunch livemeeting:http://www.bidn.com/blogs/BradSchacht/ssis/812/sql-lunch-tomorrow

然而,他们正在录制会话。