SSIS 派生列问题

SSIS Derived Column Issue

我在暂存 table 的列中有一些数据需要在目标 table 上拆分为多个列,但在使用派生转换时我总是收到错误消息。数据看起来像这样;

1 - xxx,xxxx,xxx,xxxxx,xxx
2 - xxxxx,xxxx,xxxx,xxxxxx

我从 OLEDB 源中添加了一个派生列并将其命名为新列,然后我尝试添加一个表达式 SUBSTRING( [column] , 1, FINDSTRING( [column] , ",",1 )-1 ) 我不断收到错误消息;

Error at Load Stg data into Table [SSIS.Pipeline]: The "Derived Column.Outputs[Derived Column Output].Columns[Insurer]" has a length that is not valid. The length must be between 0 and 4000.

Error at Load Stg data into Table [Derived Column [207]]: Failed to set the type of Derived Column.Outputs[Derived Column Output].Columns[Insurer] to type: "DT_WSTR", length: 6000, precision: 0, scale: 0, codepage: 0.

Error at Load Stg data into Table [Derived Column [207]]: Failed to set property "Expression" on "Derived Column.Outputs[Derived Column Output].Columns[Insurer]".



------------------------------
ADDITIONAL INFORMATION:

Exception from HRESULT: 0xC0204006 (Microsoft.SqlServer.DTSPipelineWrap)

我尝试使用高级编辑器更改列长度、数据类型,但仍然出现错误。 每行数据都有不同的长度,因此我无法对列中数据的每个部分的长度进行硬编码。我正在使用 VS 2017。

这是怎么回事?

根据设置,派生列任务能够正确推断初始长度和类型 DT_WSTR 26.

但是,您提供的错误消息表明您的数据不符合该预期

DT_WSTR", length: 6000

SSIS 中的字符串最大长度为 4000 个字符。如果在一个数据流中需要有一个多的字符串,会带入一个stream/large对象类型(DT_NTEXT)

您提供的内容有效,所以问题出在您的实际数据中。

来源

将示例数据注入流的简单查询。

SELECT
*
FROM
(
    VALUES
        ('1 - xxx,xxxx,xxx,xxxxx,xxx')
    ,   ('2 - xxxxx,xxxx,xxxx,xxxxxx')
)D(mycolumn)

DER 先分裂

提供的表达式(column 在步骤 1 中重命名为 mycolumn

SUBSTRING(mycolumn,1,FINDSTRING(mycolumn,",",1) - 1)

结果

从开始到第一个逗号的数据,不包括右端点