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)
结果
从开始到第一个逗号的数据,不包括右端点
我在暂存 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)
结果
从开始到第一个逗号的数据,不包括右端点