【问题标题】:Text was truncated or one or more characters had no match in the target code page ole db source to flat file destination文本被截断或目标代码页中的一个或多个字符不匹配 ole db 源到平面文件目标
【发布时间】:2018-10-24 14:51:10
【问题描述】:

我正在将表格输出导出到 CSV 文件。我正在使用具有 OLE DB 源和平面文件目标的 SSIS 包来执行此操作。我收到以下错误:

[平面文件目标 [2]] 错误:数据转换失败。 “地址”列的数据转换返回状态值 4 和状态文本“文本被截断或一个或多个字符在目标代码页中不匹配。”。

[平面文件目标 [2]] 错误:无法复制或转换“地址”列的平面文件数据。

[SSIS.Pipeline] 错误:SSIS 错误代码 DTS_E_PROCESSINPUTFAILED。处理输入“平面文件目标输入”(6) 时,组件“平面文件目标”(2) 上的 ProcessInput 方法失败,错误代码为 0xC02020A0。已识别的组件从 ProcessInput 方法返回错误。该错误是特定于组件的,但该错误是致命的,将导致数据流任务停止运行。在此之前可能会发布错误消息,其中包含有关失败的更多信息。

[OLE DB 源 [9]] 错误:尝试向数据流任务缓冲区添加行失败,错误代码为 0xC0047020。

[SSIS.Pipeline] 错误:SSIS 错误代码 DTS_E_PRIMEOUTPUTFAILED。 OLE DB 源上的 PrimeOutput 方法返回错误代码 0xC02020C4。当管道引擎调用 PrimeOutput() 时,组件返回了失败代码。失败代码的含义由组件定义,但是错误是致命的并且管道停止执行。在此之前可能会发布错误消息,其中包含有关失败的更多信息。

谁能给点建议?

【问题讨论】:

  • SSIS 错误堆叠在一起。这个堆栈中最早的错误是什么?那应该会导致您遇到问题。我猜这是一个数据转换问题,或者您的目标表中的某个字段对于您尝试导入的数据来说太小了。
  • 最早的错误是“地址”列的数据转换返回状态值 4 和状态文本“文本被截断或目标代码页中的一个或多个字符不匹配”。我的目标是一个平面文件 (.csv)
  • 检查您的映射,确保所有字段都正确分隔

标签: sql sql-server ssis flat-file flatfiledestination


【解决方案1】:

因此,即使在增加输出列的大小后,我的一个列中也存在类似的错误数据问题,导致此错误。就我而言,我通过使用replace 函数替换列中的错误数据来解决此问题。

我通过编写查询导出数据,并在该查询中而不是“select *”中编写了所有列名,并在导致问题的列上使用了replace 函数。我替换了所有可能导致截断的字符,例如逗号、管道、制表符等带有空格。

【讨论】:

    【解决方案2】:

    @user7396598

    感谢您为我指明了正确的方向。所以我进行了比较,这些记录似乎只是以相同的顺序插入,直到它们不匹配之后的某个点。我可以捕获不良数据。通过运行以下命令: select * from table where address != cast(address as varchar(1000)),当我删除了我的 SSIS 打包工作的坏数据时。

    现在我需要弄清楚如何将不良数据转换为 CSV 可接受的格式。

    参考 - https://stackoverflow.com/a/2683496/8452633

    【讨论】:

    • 找出错误数据的来源。如果是通过写入数据库的应用程序,您可能希望有人在未来找到一种过滤类似数据的方法。
    【解决方案3】:

    地址的输出列被指定为小于原始表列。

    看到这个 SO:SSIS data conversion failed

    总结:

    (1) 右键单击​​平面文件源并选择“显示高级编辑器”进入“输入和输出属性”选项卡展开“平面文件源输出”并选择“外部列”

    (2) 选择“地址”列并在右侧将长度增加到与原始表格中的列相同的大小

    在允许您设置列大小的导出向导中仔细检查。确保您的输出文件与您的原始表格列相匹配。

    【讨论】:

    • 谢谢,但仍然面临同样的问题。我尝试并确保“地址”的表列长度(设置为 100)与 SSIS 包中指定的长度相同。表上的列数据类型设置为 nvarchar(100),而在 SSIS 包上,其设置为 Unicode 字符串 [DT_WSTR] 和 Length=100。还要提一下,我的源是 OLEDB 源,目标是我正在写入的平面文件。
    • @ivric 仔细检查数据库中的任何地址值中是否没有非 unicode 符号。最明显的罪魁祸首是列大小,但如果这是正确的并且您仍然得到相同的错误代码,那么您的数据在输出编码中无法识别。
    • 我想可能是它的数据,但他们有什么办法可以检查吗?
    • 另外补充一下,我在 csv 平面文件中插入了一些记录。
    • @ivric 记录的插入顺序是否与原始表中的记录顺序相同?如果是这样,请查看未写入文件的第一个条目的地址。它可能有一些字符无法使用输出编码进行编码。
    猜你喜欢
    • 1970-01-01
    • 2016-12-19
    • 1970-01-01
    • 1970-01-01
    • 2012-01-27
    • 2023-03-05
    • 2020-05-01
    • 1970-01-01
    • 2018-10-26
    相关资源
    最近更新 更多