SSIS将DT_NTEXT写入UTF-8 csv文件

时间:2015-11-26 22:40:20

标签: csv utf-8 ssis

我需要将SQL查询的结果写入CSV文件(UTF-8(我需要这种编码,因为有法语字母))。其中一列太大(超过20000个字符),因此我无法使用DT_WSTR。输入的类型是DT_TEXT,因此我使用数据转换将其更改为DT_NTEXT。但是当我想将它写入文件时,我有这个错误消息:

  

错误2验证错误。 "输入列的数据类型"是   DT_NTEXT,ANSI文件不支持。请改用DT_TEXT   并使用数据转换组件

将数据转换为DT_NTEXT

有没有办法可以将数据写入我的文件? 谢谢

2 个答案:

答案 0 :(得分:1)

我有时也会遇到这类问题。使用大于255个字符的数据时,SSIS将其视为blob数据,并始终处理此问题。

然后我将此blob流数据转换为带有脚本组件的可读文本。那么其他转变应该是可能的。

sql server 2008附带的ssis就是这种情况,但我相信这还没有改变。

答案 1 :(得分:0)

我最后做的就像Samyne说的那样,我使用了一个脚本。 首先,我修改了我的SQL SP,而不是有几个列,我将所有信息放在一个列中,如下所示:

Select Column1 + '^' + Column2 + '^' + Column3 ...

然后我在脚本中使用了这段代码

            string fileName = Dts.Variables["SLTemplateFilePath"].Value.ToString();

            using (var stream = new FileStream(fileName, FileMode.Truncate))
            {
                using (var sw = new StreamWriter(stream, Encoding.UTF8))
                {

                    OleDbDataAdapter oleDA = new OleDbDataAdapter();
                    DataTable dt = new DataTable();

                    oleDA.Fill(dt, Dts.Variables["FileData"].Value);

                    foreach (DataRow row in dt.Rows)
                    {
                        foreach (DataColumn column in dt.Columns)
                        {
                            sw.WriteLine(row[column]);
                        }
                    }
                    sw.WriteLine();
                }
            }

将所有信息放在一列是可选的,我只是想避免在脚本中处理它,这样如果我的SP被更改,我就不需要修改SSIS。