带表达式的SSIS派生列系统变量长度

时间:2015-12-21 18:08:45

标签: ssis

我有一个源列KEY2,我需要在SSIS中的派生列转换中执行一些字符串操作。它配置如下

KEY2        
Replace 'KEY2'  

(FINDSTRING(KEY,",",1) - 2) > 0 ? 
  SUBSTRING(KEY,FINDSTRING(KEY,",",1) + 2,LEN(KEY) - FINDSTRING(KEY,",",1) - 1) : ""

string [DT_STR]     
1                       
1252  (ANSI - Latin I)

长度为1.我需要将其更改为100.我试过这个:

(DT_STR,100)(FINDSTRING(KEY,",",1) - 2) > 0 ?

SUBSTRING(KEY,FINDSTRING(KEY,",",1)+ 2,LEN(KEY) - FINDSTRING(KEY,",",1) - 1) :""

但是,系统会提示我出现解析错误。有什么问题?

更新

我跟着markTheLiars'回答。表达式现在看起来像这样:

KEY2        Replace 'KEY2'      (DT_STR,100,1252)((FINDSTRING(KEY,",",1) - 2) > 0 ? 
SUBSTRING(KEY,FINDSTRING(KEY,",",1) + 2,LEN(KEY) - FINDSTRING(KEY,",",1) - 1) : "")     string [DT_STR]     1                       1252  (ANSI - Latin I)

表达式编译并运行,但是我被提示有相同的错误,因为长度不会改变,即使有一个演员。

1 个答案:

答案 0 :(得分:4)

您的演员阵容缺少“Code_page”参数:

(DT_STR, 100, 1252) ((FINDSTRING(KEY,",",1) - 2) > 0 ? SUBSTRING(KEY,FINDSTRING(KEY,",",1) + 2,LEN(KEY) - FINDSTRING(KEY,",",1) - 1) : "")

1252是默认值。请参阅this answer,以获得更好的解释,而不是为什么它很重要。有关投射/转化的详情,请参阅here

该列的元数据似乎仍然设置为1个字符长。右键单击派生列转换,选择“显示高级编辑器”,选择“输入和输出属性”。展开“派生列输出” - > “输出列” - >你的专栏(我相信在这个例子中Key2)。在“数据类型属性”下,将“长度”编辑为100。

SSIS Advanced Editor

最终发现,问题不在于此组件,而是之前的组件,它在数据到达此日期流组件之前截断了数据。在这种情况下,确定哪个组件导致截断的最简单方法是使用元数据查看器,双击流路径或右键单击并选择“编辑”:

flow meta-data

这将很快为您提供有关变量及其源组件的信息。不幸的是,它不能准确地告诉你发生截断的 ,但如果你的数据流组件不是太复杂,你仍然应该能够相对快速地找到问题区域。