SQL Server 2012批量插入在文本字段中带回车?

时间:2013-10-18 12:46:56

标签: sql sql-server-2012 bulkinsert carriage-return

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

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

我的印象是,如果行/列分隔符不是CR / LF,则分隔文本字段可以包含CR / LF(或单个CR或单个LF)。如何让导入工作?感谢。

PS - 我一直在测试的方法就是拿一张桌子,将其导出到一个平面文件,其中分隔符设置如上,在文本字段中插入换行符,然后尝试再次导入数据两个方向上的SQL Server导入导出向导。这是我看到的错误消息:

  

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

     

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

     

错误0xc0202092:数据流任务1:处理文件时发生错误" C:\ Users \ bbauer \ Desktop \ IVREJECTHD.txt"在数据第2行。

     

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

1 个答案:

答案 0 :(得分:0)

批量插入可以在文本字段中导入嵌入式CR / LF对。在第二行的指定列(23)中,源中的原始数据正在进行其他操作。 “文本被截断”错误有很多原因。其中一些内容在this thread中被触及。使用向导特别咬人的一个常见原因是没有指定目标列宽。目标表是否设置正确无关紧要;如果导入中指定的列宽不够大,则会出现此错误。

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

此外,如this answer所述,即使工具(例如Management Studio)没有向您显示,嵌入式CR / LF也会出现。