使用NVARCHAR(MAX)列从表中加载数据-由于值被截断,因此无法转换为字符串

时间:2019-01-26 18:27:10

标签: sql-server ssis etl script-component ntext

我有一个带OLEDB源代码的DFT-sql表,其列名为description数据类型NVarchar(Max)

select max(len(description)) from tbl_Test -- returns 10,000

脚本转换编辑器以执行转换

Output0Buffer.AddRow();
        Output0Buffer.TransId = Row.id;
        System.Text.UnicodeEncoding encoding = new System.Text.UnicodeEncoding();
// i am splitting a column here into multiple records - no issues here
        byte[] bytes = Row.descr.GetBlobData(0, (int)Row.descr.Length);
        string myString = encoding.GetString(bytes);
        Output0Buffer.TransDescr = myString;

如果输出列为DT_WSTR,则此代码可以正常工作,但问题是此处的最大值为8000,因此运行时错误导致文本被截断,并且确实会执行我不希望的操作。

如果我将输出列作为文本流DT_NTEXT),则上述代码会出错。

通过此脚本转换,目标是一个以descr为nvarchar(max)的sql表。

1 个答案:

答案 0 :(得分:0)

在脚本组件中,将DT_NTEXT用作输出列的数据类型,并使用以下代码。

Output0Buffer.TransDescr.AddBlobData(Row.descr.GetBlobData(0, (int)Row.descr.Length))

参考