我正在尝试将平面文件导入oledb目标sql server数据库。
这是给我带来麻烦的领域:
这是平面文件连接的属性,特别是字段:
这是错误消息:
[来源 - 18942979103_txt [424]]错误:数据转换失败。该 列“recipient-name”的数据转换返回状态值4 和状态文本“文本被截断或一个或多个字符没有 匹配目标代码页。“。
我做错了什么?
答案 0 :(得分:25)
答案 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产品相关的解决方案
答案 7 :(得分:1)
答案 8 :(得分:1)
答案 9 :(得分:0)
以上都不适合我。我解决了我的问题,将我的源数据(另存为)Excel文件保存为单个xls工作表Excel 5.0 / 95并导入没有列标题。此外,我提前创建了表并手动映射,而不是让SQL创建表。
答案 10 :(得分:0)
通常是因为在连接管理器中它可能仍然是50个字符,因此我已经解决了该问题,方法是转到“连接管理器”->“高级”,然后将其更改为100,或者如果它足够大则可能是1000
答案 11 :(得分:0)
我收到了同样的错误。 在导入特定列的数据时,您需要增加列的长度。 选择一个数据源>>高级>>将列从默认的50增加到200或更多。
对我有用!