从Excel导入到SQL Server 2005的截断错误

scr*_*rot 15 sql-server import excel

简而言之,我将逐一获取一堆excel文档,并使用导入/导出向导将它们导入SQL Server 2005中的数据库.

这是一个报告(所有未显示的流程都是"成功").有没有办法让我忽略截断错误?我用谷歌搜索无效,或者至少不在我的版本中.

- Executing (Success)

- Copying to [Datadev].[dbo].[Sheet0$] (Error)
  Messages
  * Error 0xc020901c: Data Flow Task: There was an error with output
Run Code Online (Sandbox Code Playgroud)

输出"Excel源输出"(9)的"值含义描述"(234)列.返回的列状态为:"文本被截断,或者目标代码页中的一个或多个字符不匹配.".(SQL Server导入和导出向导)

  * Error 0xc020902a: Data Flow Task: The "output column "Value
Run Code Online (Sandbox Code Playgroud)

含义说明"(234)"失败,因为发生了截断,并且"输出列"上的截断行处置值含义描述"(234)"指定截断失败.指定组件的指定对象上发生截断错误.(SQL Server导入和导出向导)

  * Error 0xc0047038: Data Flow Task: SSIS Error Code
Run Code Online (Sandbox Code Playgroud)

DTS_E_PRIMEOUTPUTFAILED.组件"Source - Sheet0 $"(1)上的PrimeOutput方法返回错误代码0xC020902A.当管道引擎调用PrimeOutput()时,组件返回失败代码.失败代码的含义由组件定义,但错误是致命的,管道停止执行.在此之前可能会发布错误消息,其中包含有关失败的更多信息.(SQL Server导入和导出向导)

  * Error 0xc0047021: Data Flow Task: SSIS Error Code
Run Code Online (Sandbox Code Playgroud)

DTS_E_THREADFAILED.线程"SourceThread0"已退出,错误代码为0xC0047038.在此之前可能会发布错误消息,其中包含有关线程退出原因的更多信息.(SQL Server导入和导出向导)

  * Error 0xc0047039: Data Flow Task: SSIS Error Code
Run Code Online (Sandbox Code Playgroud)

DTS_E_THREADCANCELLED.线程"WorkThread0"收到关闭信号并正在终止.用户请求关闭,或者另一个线程中的错误导致管道关闭.在此之前可能会发布错误消息,其中包含有关线程被取消原因的更多信息.(SQL Server导入和导出向导)

  * Error 0xc0047021: Data Flow Task: SSIS Error Code
Run Code Online (Sandbox Code Playgroud)

DTS_E_THREADFAILED.线程"WorkThread0"已退出,错误代码为0xC0047039.在此之前可能会发布错误消息,其中包含有关线程退出原因的更多信息.(SQL Server导入和导出向导)

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

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

  * Information 0x402090e0: Data Flow Task: The final commit for the
Run Code Online (Sandbox Code Playgroud)

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

- Cleanup (Success)
  Messages
  * Information 0x4004300b: Data Flow Task: "component "Destination -
Run Code Online (Sandbox Code Playgroud)

Sheet0 $"(323)"写了210行.(SQL Server导入和导出向导)

Fra*_*ang 15

当我遇到截断错误时,我插入8个虚拟行.每个单元格都有长度> 256的垃圾文本.这会强制检测到的数据类型为varchar(max)而不是varchar(256).如果一行是数字列,我必须用数字填充(例如,0),如果是日期,我必须填写一个虚拟日期,否则列将导入空数据.

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

  • 这样做对我来说简单而有效.不过,一个虚拟行就足够了. (2认同)

HLG*_*GEM 8

向导使用较小的值作为Excel数据的标准varchar大小,而不是SQL Server 2000中的向导.因此,它通常会截断您尝试快速导入到临时表的数据.但是,当您执行向导时,一个屏幕将询问您是否要编辑映射,并且可以在那里修复字段的大小.或者你可以首先使用create table stament来创建一个你想要的大小的工作表(nvarchar(max)如果你是第一次查看数据并且不知道字段有多大就是好的)然后导入进去.使用Excel,我知道我也遇到了SQl Server的问题,只使用几行来确定数据类型然后插入失败的记录(比如partnumber之类的东西),因为它认为基于前几个记录它是一个整数时它实际上是一种字符串类型的数据.您也可能遇到这样的问题,因此即使您没有出现截断错误,最好还是查看映射.

  • 我一直在使用包含最大长度为10个字符的值的字段获取截断错误.即使我为字段设置了截断错误,我仍然会收到错误.这是一个已知的问题? (3认同)

Sha*_*ica 5

对我有用.

这是因为您的注册表中的Excel中有一个很棒的设置,它告诉它只检查电子表格中的前8行数据,以确定所有数据的其余部分的列大小.解决此问题的方法是修改注册表以将其设置为8到0.当它设置为0时,它将检查整个电子表格.如果文件非常大,这可能会在初始数据导入期间导致一些性能问题.这是要搜索的注册表项(可能需要设置多个):

TypeGuessRows