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

时间:2014-08-28 17:14:06

标签: sql sql-server tsql ssis

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

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

enter image description here

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

enter image description here

这是错误消息:

  

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

我做错了什么?

12 个答案:

答案 0 :(得分:25)

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

图1

enter image description here

图2

enter image description here

答案 1 :(得分:18)

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

答案 2 :(得分:14)

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

答案 3 :(得分:6)

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

答案 4 :(得分:2)

SQl Management Studio数据导入会查看前几行以确定源数据规范..

移动你的记录,使最长的文字位于顶部。

答案 5 :(得分:1)

我对2个不同的数据库(DB2和SQL)有类似的问题,最后我在DB2的源查询中使用CAST解决了这个问题。我还通过将源列调整为varchar并避免了无用的空格来利用查询:

CAST(RTRIM(LTRIM(COLUMN_NAME)) AS VARCHAR(60) CCSID UNICODE 
   FOR SBCS DATA)  COLUMN_NAME

这里的重要问题是CCSID转换。

答案 6 :(得分:1)

尽管以上建议的方法(@chookoos,here in this q&a转换为Excel工作簿)并解决了此类问题,但此解决方案this solution in another q&a很棒,因为您可以使用csv或tsv或txt文件,并执行必要的微调,而无需创建与Microsoft产品相关的解决方案 enter image description here enter image description here

答案 7 :(得分:1)

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

enter image description here

答案 8 :(得分:1)

我已经通过选中“ UNICODE”复选框解决了该问题。单击下面的图像链接:

Image


答案 9 :(得分:0)

以上都不适合我。我解决了我的问题,将我的源数据(另存为)Excel文件保存为单个xls工作表Excel 5.0 / 95并导入没有列标题。此外,我提前创建了表并手动映射,而不是让SQL创建表。

答案 10 :(得分:0)

通常是因为在连接管理器中它可能仍然是50个字符,因此我已经解决了该问题,方法是转到“连接管理器”->“高级”,然后将其更改为100,或者如果它足够大则可能是1000

答案 11 :(得分:0)

我收到了同样的错误。 在导入特定列的数据时,您需要增加列的长度。 选择一个数据源>>高级>>将列从默认的50增加到200或更多。

对我有用!