SSIS 将 DT_NTEXT 写入 UTF-8 csv 文件
SSIS write DT_NTEXT into an UTF-8 csv file
我需要将 SQL 查询的结果写入 CSV 文件(UTF-8(我需要这种编码,因为有法语字母))。其中一列太大(超过 20000 个字符),因此我无法使用 DT_WSTR。输入的类型是 DT_TEXT,所以我使用数据转换将其更改为 DT_NTEXT。但是当我想将它写入文件时,我收到了这条错误消息:
Error 2 Validation error. The data type for "input column" is
DT_NTEXT, which is not supported with ANSI files. Use DT_TEXT instead
and convert the data to DT_NTEXT using the data conversion component
有什么方法可以将数据写入我的文件吗?
谢谢
我有时也有这种问题。当处理超过 255 个字符的数据时,SSIS 将其视为 blob 数据,并将始终如此处理。
然后我将这个 blob 流数据转换为带有脚本组件的可读文本。那么其他的改造应该是可以的。
这是 sql 服务器 2008 附带的 ssis 中的情况,但我相信这还没有改变。
我最终就像 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。
我需要将 SQL 查询的结果写入 CSV 文件(UTF-8(我需要这种编码,因为有法语字母))。其中一列太大(超过 20000 个字符),因此我无法使用 DT_WSTR。输入的类型是 DT_TEXT,所以我使用数据转换将其更改为 DT_NTEXT。但是当我想将它写入文件时,我收到了这条错误消息:
Error 2 Validation error. The data type for "input column" is DT_NTEXT, which is not supported with ANSI files. Use DT_TEXT instead and convert the data to DT_NTEXT using the data conversion component
有什么方法可以将数据写入我的文件吗? 谢谢
我有时也有这种问题。当处理超过 255 个字符的数据时,SSIS 将其视为 blob 数据,并将始终如此处理。
然后我将这个 blob 流数据转换为带有脚本组件的可读文本。那么其他的改造应该是可以的。
这是 sql 服务器 2008 附带的 ssis 中的情况,但我相信这还没有改变。
我最终就像 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。