我正在使用SSIS2012。我有一个脚本组件,其输出列的类型为DT_TEXT。 (它是来自网页的XML。)
我有一个使用OLE DB的本机OLD DB \ Oracle Provider的OLE DB目标,并且该字段的表定义为CLOB。
这个问题似乎很相似:SSIS Script Component won't allow text Stream Output。这似乎给出了答案:http://www.rad.pasfu.com/index.php?/archives/35-How-to-Fill-NTEXT-Column-from-Script-Component-SSIS.html
在脚本组件中,我将XML作为字符串获取,文档称其可容纳2GB。我很难将其分配给我的Output0Buffer(DT_TEXT)。任何使用AddBlobData的尝试都会产生错误。
// Output0Buffer.AddRow();
// Output0Buffer.forecastXML = forecastXML;
// Output0Buffer.AddBlobData(forecastXML);
// Output0Buffer.LargeCol.AddBlobData(forecastXML);
// Output0Buffer.LargeCol.AddBlobData(System.Text.Encoding.UTF8.GetBytes(forecastXML));
这些是我的一些尝试,但是没有一个可以编译。最后一个给出错误:'Output0Buffer'不包含'LargeCol'的定义,并且找不到扩展方法'LargeCol'接受类型为'Output0Buffer'的第一个参数(您是否缺少using指令或程序集引用? )
如何获取从脚本组件到oracle目标的文本流?
答案 0 :(得分:1)
事实证明SSIS Script Component won't allow text Stream Output确实有答案,但是我不得不弄清楚答案中的字段是什么意思。
我将解释所有部分,因此很清楚发生了什么事情。
脚本组件具有一个名为Output 0的输出,带有Output Columns ForecastXML。这些是默认名称,但最后一个除外。 ForecastXML的数据类型为文本流[DT_TEXT]
在脚本本身中,我有一个名为ForecastXML的字符串(是的,名称相同,这令人困惑。)
在用数据填充字符串ForecastXML之后,我可以使用以下几行将其分配给Output0Buffer:
String forecastXML = oResult.XmlResult;
Output0Buffer.AddRow();
Output0Buffer.forecastXML.AddBlobData(System.Text.Encoding.UTF8.GetBytes(forecastXML));
第一行适用于所有数据类型。因为我正在写NTEXT,所以需要第二行,而不是直接分配。 Output0Buffer.forecastXML指的是我的输出0中定义的NText数据类型。最后一个是代码中的字符串。
更清楚地说,我应该创建
而不是创建字符串Output0Buffer.forecastXML.AddBlobData(System.Text.Encoding.UTF8.GetBytes(oResult.XmlResult));
其中,oResut.XmlResult是获取XML的调用的结果。将其分配给字符串是多余的步骤。
这将转到Oracle CLOB,因此下一步是将输出带到“派生列”并将我的输出ForecastXML转换为(DT_NTEXT)forecastXML。 (我怀疑我正在进行一些不必要的类型更改。)
然后,将该字段映射到我的OLE DB目标中的CLOB字段。