【问题标题】:SSIS Derived Column System Variable Length with expressionSSIS派生列系统可变长度与表达式
【发布时间】:2015-12-21 18:08:45
【问题描述】:

我有一个源列 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)

表达式编译并运行,但是我提示相同的错误,因为即使有强制转换,长度也不会改变。

【问题讨论】:

  • 我认为 cast 缺少参数。试试(DT_STR,100, 1252)
  • @mikeTheLiar,我已经尝试过你的建议。这次的错误是:数据类型DT_WSTR和DT_I4不兼容二元运算符“>”。
  • 然后你会想要将整个语句包装在一个组中(它在第一个元素上执行强制转换,然后执行比较,当你想要它时,相反
  • @mikeTheLiar,我认为这就是我正在做的事情。我该如何选组?谢谢。
  • 如果您在第一次比较之前查看您缺少( 的语句。正在转换 (FINDSTRING(KEY,",",1) - 2) 语句而不是结果。只需在() 中的演员表之后将整个内容包装起来。第二个问题归结为不匹配的括号

标签: ssis


【解决方案1】:

您的演员表缺少“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。


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

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

【讨论】:

  • 没有输出列。我尝试添加一个名为“KEY2”的文件,但提示编译错误:所有派生列都必须具有唯一名称。
  • 我通过更改源组件的输出列的长度快速解决了这个问题:Key2。你的回答几乎是正确的。这是最好的答案。
  • 啊,是的。这就说得通了。如果先前的组件正在截断输入,则必须将其固定在那里。如果您还不知道,您可以右键单击组件之间的路径并查看元数据 - 这在过去对我有好几次帮助。
  • 我不知道您可以通过右键单击路径来查看元数据。您能否使用该信息修改问题以供将来参考? +1。
  • 完成。不幸的是,SSIS 有时非常难以理解。当它起作用时,它很棒 - 当它不起作用时,它会让你想要扯掉你的头发。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2014-09-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-03-07
相关资源
最近更新 更多