SQL Server从.tsv或.txt导入错误(使用导入向导)
我正尝试使用SQL Server 2016(使用SSMS)中的导入和导出向导从.tsv(或.txt)平面文件源导入。我有3个文件正在导入,前两个文件没有问题。第三个文件开始导入,但在〜100K行之后停止(文件约为1.6M行)。是SQL Server从.tsv或.txt导入错误(使用导入向导)
我收到错误消息如下:
复制到[DBO] [文件名](错误)
消息
错误0xc02020a1:数据流任务1 :数据转换失败。 “关键字”列的数据转换返回状态值4,状态文本“文本被截断或者一个或多个字符在目标代码页中不匹配”。 (SQL Server导入和导出向导)
错误0xc020902a:数据流任务1:“源 - members_tsv.Outputs [平面文件源输出] .Columns [关键词]”失败,因为发生了截断,并截断行处置“源 - members_tsv.Outputs [平面文件源输出] .Columns [关键字]”指定截断失败。指定组件的指定对象上发生截断错误。 (SQL Server导入导出向导)
错误0xc0202092:数据流任务1:数据处理文件“C:............ \ filename.tsv”时发生错误行(SQL Server导入和导出向导)
错误0xc0047038:数据流任务1:SSIS错误代码DTS_E_PRIMEOUTPUTFAILED。 Source - members_tsv上的PrimeOutput方法返回错误代码0xC0202092。当管道引擎调用PrimeOutput()时,组件返回失败代码。失败代码的含义由组件定义,但错误是致命的,并且管道停止执行。在此之前可能会发布错误消息,提供有关失败的更多信息。 (SQL Server导入和导出向导)
中包含的118345行的数据,12列是 “哈蒙医疗和康复医院位置”。这是大于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个字符的数据。我想知道是否有什么东西在全球设置,我可能需要改变...
我已经尝试搜索某人有类似的问题或相同的错误信息,但没有遇到任何解决我的问题。任何帮助将非常感激!
请按照下列步骤操作:在行没有118345
校验值和12列(关键字)将其删除,并尝试基于错误插入数据生成:
- “的数据行118345上处理文件“C:............ \ filename.tsv”时发生错误。“
- “数据转换失败的数据转换为列。‘关键词’返回状态值4和状态文本‘文本被截断或一个或多个字符在目标代码页不匹配’
。问题可能与数据字符。
2.的“关键字”以上(100)或数据类型变化到VARCHAR代替nvarchar列的任增加尺寸。
此致
感谢您的建议。 我开始删除118345第12列(“Harmon医疗和康复医院职位”,长度超过50个字符)并重新导入。 这次我试着把所有的字段都作为varchar(500)。它进一步提高了这一点,但仍停在另一行(并且该行也具有> 50个字符的值)。它似乎不允许我导入超过50个字符的任何内容,即使我在导入设置中更改了这一点。有什么地方需要更改varchar长度的全局设置吗? – Ajp
你确定你正确地重新定义表格吗?你是否丢下桌子并在其位置重新创建新的定义?我觉得这两个定义都有相同的名字'[dbo]。[members3]''。 –
每次我导入时,我都会先删除数据库中的表。我从相同的源文件导入,因此它从源文件中获取其名称。 – Ajp
_“我知道这不是数据本身的问题,”>>显然你不知道,问题是数据。错误消息是说:_Text被截断或者一个或多个字符在目标代码page_中不匹配。如果我不得不猜测,我会说这是导致问题的后者,即源文件中目标列的代码页中不可用的字符。 –
即使错误是数据,它也会成功导入到Access(并且可能只有一行出现错误,而不是完成导入)。但是,我需要它在SQL Server中,而不是Access。有关如何绕过此错误或解决此问题的任何建议? – Ajp
检查源文件的编码,检查排序规则(以及代码页)并查看它们是否兼容。另外,为了得到任何正确的答案,您应该发布出现问题的源数据行,文件的编码,要导入的列定义以及该列的排序规则。否则人们只能猜测。 –