2

我到处都看到过这个问题的变体,但似乎无法让它发挥作用。我需要能够从一个平面文件中批量插入数据,其中一些文本字段将包含回车符。

我已将平面文件设置为由插入符号 ^ 符号分隔。行分隔符是竖线,列分隔符是制表符。为什么当我的文本字段中有回车时导入仍然失败?

我的印象是,如果行/列分隔符不是 CR/LF,那么分隔的文本字段可能包含 CR/LF(或单个 CR 或单个 LF)。我怎样才能让导入工作?谢谢。

PS - 我一直在测试的方式是只取一个表,将其导出到一个带有上述分隔符的平面文件,在文本字段中插入换行符,然后尝试使用 SQL Server 导入导出向导再次导入数据在两个方向。这是我看到的错误消息:

错误 0xc02020a1:数据流任务 1:数据转换失败。列“第 23 列”的数据转换返回状态值 4 和状态文本“文本被截断或一个或多个字符在目标代码页中不匹配。”。

错误 0xc020902a:数据流任务 1:“源 - IVREJECTHD_txt.Outputs[平面文件源输出].Columns[Column 23]”失败,因为发生了截断,并且“源 - IVREJECTHD_txt.Outputs [平面文件源输出”上的截断行处置].Columns[Column 23]" 指定截断失败。指定组件的指定对象发生截断错误。

错误 0xc0202092:数据流任务 1:处理数据行 2 上的文件“C:\Users\bbauer\Desktop\IVREJECTHD.txt”时出错。

错误 0xc0047038:数据流任务 1:SSIS 错误代码 DTS_E_PRIMEOUTPUTFAILED。Source - IVREJECTHD_txt 上的 PrimeOutput 方法返回错误代码 0xC0202092。当管道引擎调用 PrimeOutput() 时,组件返回了失败代码。失败代码的含义由组件定义,但错误是致命的并且管道停止执行。在此之前可能会发布错误消息,其中包含有关失败的更多信息。

4

1 回答 1

0

批量插入可以在文本字段中导入嵌入的 CR/LF 对。在第二行的指定列 (23) 处,源中的原始数据正在发生其他事情。“文本被截断”错误有多种原因。其中一些在这个线程中被触及。一个特别困扰使用向导的常见原因是未指定目标列宽。您的目标表是否设置正确并不重要;如果导入中指定的列宽不够大,您将收到此错误。

您可能会考虑使用 T-SQL 和格式文件执行批量插入;如果您需要反复测试您的导入过程并对其进行改进,那么进行修改和重新运行会容易得多。

此外,正如本答案中所述,即使工具(例如 Management Studio)没有向您显示嵌入式 CR/LF,它们也会出现。

于 2013-10-18T16:56:17.460 回答