文本被截断或目标代码页中的一个或多个字符不匹配,包括unpivot中的主键

l--*_*''' 38 sql t-sql sql-server ssis

我正在尝试将平面文件导入oledb目标sql server数据库.

这是给我带来麻烦的领域:

在此输入图像描述

这是该平面文件连接的属性,特别是字段:

在此输入图像描述

这是错误信息:

[来源 - 18942979103_txt [424]]错误:数据转换失败.列"recipient-name"的数据转换返回状态值4和状态文本"文本被截断或一个或多个字符在目标代码页中不匹配".

我究竟做错了什么?

ADH*_*ADH 40

以下是解决这个问题的方法.我没有必要转换为Excel.在选择数据源为"文本流"时,只需修改DataType(图1).您还可以选中"编辑映射"对话框以验证对大小的更改(图2).

图1

在此输入图像描述

图2

在此输入图像描述

  • 谢谢!!!!让它工作而不转换..我需要安装oledb插件,如果我使用excel. (2认同)
  • 为我工作,但还必须在平面文件源步骤中将代码页从“1252(ANSI - Latin I)”更改为“65001(UTF-8)”,否则它仍然会因相同的错误而失败。在尝试了一系列解决方案来导入超过 100 万行(因此无法使用 Excel)后,与上述切换到文本流的解决方案结合起来效果很好。 (2认同)

Cho*_*oos 20

我知道这是一个老问题.我解决它的方式 - 在通过增加长度或甚至更改为数据类型文本失败后 - 创建了一个xlsx文件并导入.它准确地检测到数据类型,而不是将所有列设置为varchar(50).结果是nvharchar(255),该列也会这样做.

  • 如果您的数据对于Excel而言太大,该怎么办? (3认同)
  • 这对我有用。nvarchar(255)没有。 (2认同)

小智 17

我通过ORDERING我的源数据(xls,csv,无论如何)来解决这个问题,使得文件顶部的文本值最长.Excel很棒.在挑战性的专栏上使用LEN()函数.按该长度值排序,数据集顶部的最长值.保存.再次尝试导入.

  • 我的导入失败,数据约为 3000 个字符,此方法修复了导入错误 (2认同)

小智 11

我已经通过选中“UNICODE”复选框解决了这个问题。点击下面的图片链接:

图像



use*_*366 6

SQL Server可能能够为您建议正确的数据类型(即使默认情况下它没有选择正确的类型) - 单击"建议类型"按钮(如上面的屏幕截图所示)允许您让SQL Server扫描源并建议抛出错误的字段的数据类型.在我的情况下,选择扫描20000行来生成建议,并使用生成的建议数据类型,修复了问题.


小智 6

虽然上面提出的方法(@chookoos,在此问答转换为 Excel 工作簿)并导入解决了这些类型的问题,但此解决方案在另一个问答中的解决方案非常好,因为您可以保留 csv 或 tsv 或 txt 文件,并执行无需创建 Microsoft 产品相关解决方案即可进行必要的微调 在此处输入图片说明 在此处输入图片说明


小智 6

您需要在导入特定列的数据时增加列长度。

选择数据源 >> 高级 >> 将列从默认的 50 增加到 200 或更多。


Mat*_*ans 5

不是真正的技术解决方案,但 SQL Server 2017 平面文件导入已完全改进,只需单击 5 次即可导入我的大型文件,无需我的任何输入即可处理编码/字段长度问题

在此处输入图片说明