截断误差从Excel导入到SQL Server 2005(Truncation errors imp

2019-06-24 01:56发布

长话短说,我正在帮Excel文档的一个接一个,并使用导入/导出向导将在SQL Server 2005中的数据库导入它们。

这里有一个报告(未显示所有的进程都是“成功”)。 有没有什么办法,我忽略截断错误? 我在我的身边版Google搜索无果,或至少不。

 - Executing (Success) - Copying to [Datadev].[dbo].[Sheet0$] (Error) Messages * Error 0xc020901c: Data Flow Task: There was an error with output 

上输出“Excel源输出”列“值含义描述”(234)(9)。 状态返回的列是:“文本被截断或一个或多个字符在目标代码页不匹配。” (SQL Server导入和导出向导)

  * Error 0xc020902a: Data Flow Task: The "output column "Value 

含义说明“(234)”失败,因为发生了截断,并在‘输出列‘值含义说明截断行处置’(234)’上截断指定失败。 指定组件的指定对象上发生截断误差。 (SQL Server导入和导出向导)

  * Error 0xc0047038: Data Flow Task: SSIS Error Code 

DTS_E_PRIMEOUTPUTFAILED。 上部件 “源 - Sheet0 $” 的PrimeOutput方法(1)返回的错误码0xC020902A。 该组件返回故障代码时,管道引擎调用PrimeOutput()。 失败代码的含义由组件定义,但错误是致命和管道停止执行。 有可能在此之前张贴与故障有关的详细信息的错误消息。 (SQL Server导入和导出向导)

  * Error 0xc0047021: Data Flow Task: SSIS Error Code 

DTS_E_THREADFAILED。 线程“SourceThread0”已退出,错误代码0xC0047038。 有可能在此之前已经对为什么线程退出详细信息的错误消息。 (SQL Server导入和导出向导)

  * Error 0xc0047039: Data Flow Task: SSIS Error Code 

DTS_E_THREADCANCELLED。 线程“WorkThread0”接收的关断信号和正在终止。 用户请求关闭,或者在另一个线程中的错误导致管道关闭。 有可能在此之前已经对为什么线程被取消更多信息的错误消息。 (SQL Server导入和导出向导)

  * Error 0xc0047021: Data Flow Task: SSIS Error Code 

DTS_E_THREADFAILED。 线程“WorkThread0”已退出,错误代码0xC0047039。 有可能在此之前已经对为什么线程退出详细信息的错误消息。 (SQL Server导入和导出向导)

 - Post-execute (Success) Messages * Information 0x402090df: Data Flow Task: The final commit for the 

数据插入已经开始。 (SQL Server导入和导出向导)

  * Information 0x402090e0: Data Flow Task: The final commit for the 

数据插入已经结束。 (SQL Server导入和导出向导)

 - Cleanup (Success) Messages * Information 0x4004300b: Data Flow Task: "component "Destination - 

Sheet0 $ “(323)写道:” 210行。 (SQL Server导入和导出向导)

Answer 1:

该向导使用一个较小的值作为标准的VARCHAR大小的Excel数据比你在SQL Server 2000中的向导,因为它往往会截断你正在尝试做一个快速的导入到一个临时表中数据的结果得到。 但是,当你做向导,一个屏幕会问你,如果你想要编辑的映射,你可以修复领域存在的大小。 或者你可以USEA首先创建表stament创建工作表,你想要的大小(为nvarchar(max)为好,如果你正在寻找的第一次的数据,而且不知道该领域将有多大),然后导入进去。 使用Excel,我知道,我也有过只用几行,以确定数据类型与SQL Server的问题,然后插入失败的记录(说这样的事情部分号码),因为它基于第一几条记录以为这是一个整数,当它真是一串数据类型。 你也可以有这样的问题,所以它是审查映射反正即使你没有得到截断误差是个好主意。



Answer 2:

当我得到截断误差,我将8个虚设行。 每个小区具有长度> 256这迫使检测到的数据类型是VARCHAR(最大),而不是为varchar(256)的垃圾文本。 如果某行是一个数列,我有一个数字(例如,0)来填充它,如果它是一个日期,我必须填写一个虚拟的日期,否则列将用空数据导入。

然后我在导入后删除这些垃圾行。



Answer 3:

这里是为我工作。

这是由于在Excel中您的注册表,告诉它只能检查你的电子表格中的第8行的数据,以确定列大小的所有剩余的数据一个美好的环境。 造成这种情况的解决方法是修改注册表,从8到0设定它时,它被设置为0,它会检查整个电子表格。 这可以在初始数据导入过程中导致一些性能问题,如果该文件是非常大的。 下面是该注册表项,以搜索(可能有不止一个需要设置):

TypeGuessRows



Answer 4:

http://support.microsoft.com/kb/281517

要更改TypeGuessRows值,使用以下步骤:1.On开始菜单,单击运行。 在运行对话框中,键入regedt32,然后单击确定。 2.Open在注册表编辑器中找到以下项:

HKEY_LOCAL_MACHINE \ SOFTWARE \微软\喷气\ 4.0 \发动机\ EXCEL

注意对于64位的系统中,相应的键是如下:

HKLM \ SOFTWARE \ wow6432node \微软\喷气\ 4.0 \发动机\ EXCEL 3.双击TypeGuessRows。 4.In DWORD编辑器对话框中,单击基数下的十进制。 键入0和16之间,包括端点值,数值数据。 5.Click OK,然后退出注册表编辑器。 第二解决此问题(而不修改注册表)的一种方法是,以确保与字段,其具有数据255个字符或更多的行,存在于前8行的源数据文件的。



Answer 5:

为什么你要忽略错误? 为什么不找他们,解决这些问题?

无论如何,如果你需要做更多的比向导提供,那么你应该直接使用SSIS(SQL Server集成服务)。 这就是精灵使用,只有它不能假设的错误都OK。

这是非常简单的在你的Excel文件写一个SSIS包循环,并将其导入一次一个。 进口数据流可以配置要么忽略错误,或做别的事情与他们一样,举报。



Answer 6:

对于偶尔来导入Excel,CSV或文本数据到SQL Server,其中截断误差正在经历的,我会建议将数据导入到MS访问,然后再使用向上调整向导创建,并直接在SQL填充表。



Answer 7:

在SQL Server导入向导,只要你得到你需要指定您正在使用“高级”选项导入数据点击该文件的部分。 这将为您一起显示所有字段中输入文件与字段属性。 您需要更改的属性为“数据类型”。 它通常默认为“串[DT_STR]”。 如果您将其更改为“文本流[DT_TEXT]”你会增加该领域大幅的大小,因此将最有可能避免截断误差。



文章来源: Truncation errors importing to SQL Server 2005 from Excel