Sql server 2008 SSIS:将错误行重定向到文件。文件包含额外的意外回车
我想将无法加载到表中的行重定向到错误文件 我看到红色异常路径有3个输入列进入,“平面文件源错误输出列”包含文件中的原始数据 问题是当我打开文件时,每行后面都有一个额外的回车符。我希望能够手动修复错误并重新处理它们,而不必删除所有添加的CRLF字符。因此,我添加了一个脚本组件,以删除添加的字符Sql server 2008 SSIS:将错误行重定向到文件。文件包含额外的意外回车,sql-server-2008,ssis,Sql Server 2008,Ssis,我想将无法加载到表中的行重定向到错误文件 我看到红色异常路径有3个输入列进入,“平面文件源错误输出列”包含文件中的原始数据 问题是当我打开文件时,每行后面都有一个额外的回车符。我希望能够手动修复错误并重新处理它们,而不必删除所有添加的CRLF字符。因此,我添加了一个脚本组件,以删除添加的字符 public override void Input0_ProcessInputRow(Input0Buffer Row) { string buffer = GetString(Row.Fl
public override void Input0_ProcessInputRow(Input0Buffer Row)
{
string buffer = GetString(Row.FlatFileSourceErrorOutputColumn.GetBlobData(0, (int)(Row.FlatFileSourceErrorOutputColumn.Length)));
System.Windows.Forms.MessageBox.Show(buffer);
byte[] ThisBytes = GetBytes("Test");
Row.FlatFileSourceErrorOutputColumn.ResetBlobData();
Row.FlatFileSourceErrorOutputColumn.AddBlobData(ThisBytes);
}
static string GetString(byte[] bytes)
{
char[] chars = new char[bytes.Length / sizeof(char)];
System.Buffer.BlockCopy(bytes, 0, chars, 0, bytes.Length);
return new string(chars);
}
static byte[] GetBytes(string str)
{
byte[] bytes = new byte[str.Length * sizeof(char)];
System.Buffer.BlockCopy(str.ToCharArray(), 0, bytes, 0, bytes.Length);
return bytes;
}
但我的调试消息框显示了以块形式显示的不可显示字符
当我试图对输出文件强制执行文字“测试”以测试是否可以控制文件中的内容时,每个字母后面都会出现NULL(ASCII 0)字符
当我只是简单地使用脚本块组件将输出列重定向到文件w/o以尝试修改写入的数据时,为什么SSIS要添加CRLF?我怎样才能摆脱CRLF?为什么我无法读取数据列中的字节数组并将其显示为字符串?为什么“TEST”文本的每个字母之间都有空值?我的字节数组转换函数不正确吗?明白了
public override void Input0_ProcessInputRow(Input0Buffer Row)
{
string buffer = GetString(Row.FlatFileSourceErrorOutputColumn.GetBlobData(0, (int)(Row.FlatFileSourceErrorOutputColumn.Length - 2)));
System.Windows.Forms.MessageBox.Show(buffer);
byte[] ThisBytes = GetBytes(buffer);
Row.FlatFileSourceErrorOutputColumn.ResetBlobData();
Row.FlatFileSourceErrorOutputColumn.AddBlobData(ThisBytes);
}
static string GetString(byte[] bytes)
{
System.Text.Encoding enc = System.Text.Encoding.ASCII;
return enc.GetString(bytes);
}
static byte[] GetBytes(string str)
{
System.Text.Encoding enc = System.Text.Encoding.ASCII;
return enc.GetBytes(str);
}
我仍然想知道SSIS为什么要添加CRLF 如果我错了,请纠正我,但您显示的是无法从源文件(详细信息文件)读取的行的重定向。仅仅因为它们已被读取并不意味着它们不会在插入表时爆炸。是的,我正在根据与目标表匹配的预期列定义集重定向无法读取的行。例如,文件中的列A映射到dest表的列A。两处的A列定义为varch(1)。如果我得到的varchar vaclue大于len 1,我希望它指向异常文件。