我正在尝试使用SQL Server 2016中的导入和导出向导(使用SSMS)从.tsv(或.txt)平面文件源导入。我有3个文件正在导入,前两个导入没有问题。第三个文件开始导入,但在~100K行之后停止(文件大约为1.6M行)。
我收到的错误消息如下:
复制到[dbo]。[文件名](错误)
消息
错误0xc02020a1:数据流任务1:数据转换失败。列“keyword”的数据转换返回状态值4和状态文本“文本被截断,或者目标代码页中的一个或多个字符不匹配”。 (SQL Server导入和导出向导)
错误0xc020902a:数据流任务1:“源 - members_tsv.Outputs [平面文件源输出] .Columns [keyword]”失败,因为发生了截断,截断行处置“Source - members_tsv.Outputs [平面文件源输出] .Columns [keyword]“指定截断失败。指定组件的指定对象上发生截断错误。 (SQL Server导入和导出向导)
错误0xc0202092:数据流任务1:在数据行118345上处理文件“C:............ \ filename.tsv”时发生错误。 (SQL Server导入和导出向导)
错误0xc0047038:数据流任务1:SSIS错误代码DTS_E_PRIMEOUTPUTFAILED。 Source上的PrimeOutput方法 - members_tsv返回错误代码0xC0202092。当管道引擎调用PrimeOutput()时,组件返回失败代码。失败代码的含义由组件定义,但错误是致命的,管道停止执行。在此之前可能会发布错误消息,其中包含有关失败的更多信息。 (SQL Server导入和导出向导)
第118365行第12栏所载的数据是“Harmon Medical and Rehabilitation Hospital Positions”。这大于50个字符。
源文件采用UTF-8编码。数据库的排序规则为SQL_Latin1_General_CP1_CI_AS
。当我进入导入时,我将代码页更改为65001(UTF-8)。
我尝试过的列定义如下:
CREATE TABLE [dbo].[members3] (
[member_id] nvarchar(100),
[date] nvarchar(100),
[email_domain] nvarchar(100),
[first_name] nvarchar(100),
[city] nvarchar(100),
[state] nvarchar(100),
[zip] nvarchar(100),
[degree_level] nvarchar(100),
[hs_or_ged_year] nvarchar(100),
[pcp_score] nvarchar(100),
[keyword] nvarchar(100)
);
和
CREATE TABLE [dbo].[members3] (
[member_id] varchar(100),
[date] varchar(100),
[email_domain] varchar(100),
[first_name] varchar(100),
[city] varchar(100),
[state] varchar(100),
[zip] varchar(100),
[degree_level] varchar(100),
[hs_or_ged_year] varchar(100),
[pcp_score] varchar(100),
[keyword] varchar(100)
);
我也尝试将字符数增加到500,但也没有成功。即使我将它接受的字符数更改为大于50的字符,它似乎仍然不允许我导入大于50个字符的数据。我想知道全局设置中是否存在我可能需要更改的内容......
我尝试过搜索有类似问题或相同错误消息的人,但没有遇到任何解决我问题的问题。任何帮助将不胜感激!
答案 0 :(得分:1)
请按以下步骤操作:
1。检查第118345行和第12列(关键字)的值,将其删除并尝试根据生成的错误插入数据:
- "处理文件时发生错误" C:............ \ filename.tsv"在数据行118345上。"
- "数据转换失败。列"关键字"的数据转换返回状态值4和状态文本"文本被截断或目标代码页中的一个或多个字符不匹配。"
问题可能与数据特征有关。
2。要么增加列的大小"关键字"超过(100)或将数据类型更改为Varchar而不是nvarchar。
此致