SSIS-优先约束编辑器-表达式

时间:2020-04-23 16:29:52

标签: ssis dataflow foreach-loop-container

我创建了一个SSIS包,以从文件夹中选择平面文件并导入到SQL数据库中。他们有5个遵循此命名方案的注释文件:

ABS_Comment-name.txt

我需要在连字符(-)之前的文本。

 @[User::FileName] == "ABS_Comment" 

注意:此表达式将在For Each循环容器的“优先约束”编辑器中使用

让我知道您是否需要更多信息

2 个答案:

答案 0 :(得分:2)

创建额外的SSIS变量不会花费您任何费用,并且大大简化了调试。

我将添加一个名为BaseFileName的新SSIS变量,其目的是使您能够查看针对FileName的字符串操作的结果。如果您是基于对象/优先级约束构建的,则将无法对其进行检查。

根据您的情况,您需要选择最左边的字符,并且需要找出字符串中连字符的位置。 [LEFT][1]表达式或[SUBSTRING][1]将满足使用前N个字符的要求。 [FINDSTRING][1]表达式是确定搜索字符连字符的位置的方式。

LEFT(@[User::FileName, FINDSTRING(@[User::FileName], "-", 1))

该表达式可能会偏离1,因此请检查结果字符串,并根据需要在FINDSTRING的结果中添加/删除1。

对于SSIS 2005上的人们来说,不存在LEFT,因此重写为SUBSTRING的方式如下(对由一个人进行检查的相同警告)

SUBSTRING(@[User::FileName, 1, FINDSTRING(@[User::FileName], "-", 1))

此时,您的简化优先约束是

@[User::BaseFileName] == "ABS_Comment"

答案 1 :(得分:1)

Billinkc对于如何获取您要查找的字符串给出了一个很好的答案,但是我认为您正在尝试对以ABS_Comment开头的文件名运行一个foreach循环:

这是一个foreach循环编辑器:

enter image description here

这里有两件事要设置:

  1. 设置文件夹
  2. 设置带有ABS_Comment * .txt掩码的文件

然后,您必须将文件名设置为变量: enter image description here

然后您需要在平面文件连接上设置表达式以使用您的变量。