我需要将SQL查询的结果写入CSV文件(UTF-8(我需要这种编码,因为有法语字母))。其中一列太大(超过20000个字符),因此我无法使用DT_WSTR。输入的类型是DT_TEXT,因此我使用数据转换将其更改为DT_NTEXT。但是当我想将它写入文件时,我有这个错误消息:
错误2验证错误。 "输入列的数据类型"是 DT_NTEXT,ANSI文件不支持。请改用DT_TEXT 并使用数据转换组件
将数据转换为DT_NTEXT
有没有办法可以将数据写入我的文件? 谢谢
答案 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。