我有一个源列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)
表达式编译并运行,但是我被提示有相同的错误,因为长度不会改变,即使有一个演员。
答案 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。
最终发现,问题不在于此组件,而是之前的组件,它在数据到达此日期流组件之前截断了数据。在这种情况下,确定哪个组件导致截断的最简单方法是使用元数据查看器,双击流路径或右键单击并选择“编辑”:
这将很快为您提供有关变量及其源组件的信息。不幸的是,它不能准确地告诉你发生截断的 ,但如果你的数据流组件不是太复杂,你仍然应该能够相对快速地找到问题区域。