【问题标题】:SSIS write DT_NTEXT into an UTF-8 csv fileSSIS 将 DT_NTEXT 写入 UTF-8 csv 文件
【发布时间】:2015-11-26 22:40:20
【问题描述】:

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

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

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

【问题讨论】:

    标签: csv utf-8 ssis


    【解决方案1】:

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

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

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

    【讨论】:

      【解决方案2】:

      我最终像 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。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2015-02-13
        • 1970-01-01
        • 2018-07-10
        • 1970-01-01
        • 2014-07-01
        • 2011-05-06
        • 2013-11-21
        相关资源
        最近更新 更多