我的Excel文件中11列叫“公司介绍”,就是一些货运代理公司的介绍。Sql server处理导Excel数据流程是这样的,它会先创建目标表,再把Excel数据写入缓冲区,然后再把缓冲区数据写入目标表。上网搜索了一下,发现问题就在创建目标表和写入缓冲区,Sql server会根据现在的Excel中的数据格式来写入缓冲区和创建目标表。比如excel中有一列为编号,里面是数字,Sqlserver就会在目标表里建一列叫“编号”,为float类型.而对于我的excel文件中的"公司介绍"这一列,是文字,那Sql server如何建立目标列或缓冲区呢?它怎么知道该把目标建立成Varchar还是text呢?原来Sql server是这样做的,他会取Excel文件中的前8行(2的三次方),然后算这8行里“公司介绍”的最大长度,如果这8行里最长的 > 255(默认数据库每个单元最长字节。最长可达4千),则目标列和缓冲区就会建立成Ntext类型,相反则会建立成Nvarchar类型。这样,问题就来了!假设我的Excel文件前8行“产品说明”中都 < 255,则目标和缓冲区就被建立为Varchar(255)类型了(这里说明一下,你可以修改目标表的字段类型,但缓冲区长度或类型是无法修改的)。而如果我的第10行里“公司介绍”的长度超过了255,则Sql server往缓冲区里写的时候,自然就发生了如上的错误:数据对于指定的缓冲区来讲太大。这样就害的我导数据N多次失败!耽误我大量时间。
Excel数据导入到SQL报错:缓冲区溢出
原创
             ©著作权归作者所有:来自51CTO博客作者古傅锋的原创作品,请联系作者获取转载授权,否则将追究法律责任        
                     今天把Excel数据导入到Sql Server中,尝试N次,均以失败告终。报错如下:作为源列69(“产品说明”)的数据对于所指定源11行的缓冲区来讲太大。
我的Excel文件中11列叫“公司介绍”,就是一些货运代理公司的介绍。Sql server处理导Excel数据流程是这样的,它会先创建目标表,再把Excel数据写入缓冲区,然后再把缓冲区数据写入目标表。上网搜索了一下,发现问题就在创建目标表和写入缓冲区,Sql server会根据现在的Excel中的数据格式来写入缓冲区和创建目标表。比如excel中有一列为编号,里面是数字,Sqlserver就会在目标表里建一列叫“编号”,为float类型.而对于我的excel文件中的"公司介绍"这一列,是文字,那Sql server如何建立目标列或缓冲区呢?它怎么知道该把目标建立成Varchar还是text呢?原来Sql server是这样做的,他会取Excel文件中的前8行(2的三次方),然后算这8行里“公司介绍”的最大长度,如果这8行里最长的 > 255(默认数据库每个单元最长字节。最长可达4千),则目标列和缓冲区就会建立成Ntext类型,相反则会建立成Nvarchar类型。这样,问题就来了!假设我的Excel文件前8行“产品说明”中都 < 255,则目标和缓冲区就被建立为Varchar(255)类型了(这里说明一下,你可以修改目标表的字段类型,但缓冲区长度或类型是无法修改的)。而如果我的第10行里“公司介绍”的长度超过了255,则Sql server往缓冲区里写的时候,自然就发生了如上的错误:数据对于指定的缓冲区来讲太大。这样就害的我导数据N多次失败!耽误我大量时间。
            我的Excel文件中11列叫“公司介绍”,就是一些货运代理公司的介绍。Sql server处理导Excel数据流程是这样的,它会先创建目标表,再把Excel数据写入缓冲区,然后再把缓冲区数据写入目标表。上网搜索了一下,发现问题就在创建目标表和写入缓冲区,Sql server会根据现在的Excel中的数据格式来写入缓冲区和创建目标表。比如excel中有一列为编号,里面是数字,Sqlserver就会在目标表里建一列叫“编号”,为float类型.而对于我的excel文件中的"公司介绍"这一列,是文字,那Sql server如何建立目标列或缓冲区呢?它怎么知道该把目标建立成Varchar还是text呢?原来Sql server是这样做的,他会取Excel文件中的前8行(2的三次方),然后算这8行里“公司介绍”的最大长度,如果这8行里最长的 > 255(默认数据库每个单元最长字节。最长可达4千),则目标列和缓冲区就会建立成Ntext类型,相反则会建立成Nvarchar类型。这样,问题就来了!假设我的Excel文件前8行“产品说明”中都 < 255,则目标和缓冲区就被建立为Varchar(255)类型了(这里说明一下,你可以修改目标表的字段类型,但缓冲区长度或类型是无法修改的)。而如果我的第10行里“公司介绍”的长度超过了255,则Sql server往缓冲区里写的时候,自然就发生了如上的错误:数据对于指定的缓冲区来讲太大。这样就害的我导数据N多次失败!耽误我大量时间。
解决办法: 
       修改注册表:HKEY_LOCAL_MACHINE/SOFTWARE/Microsoft/Jet/4.0/Engines/Excel 下双击右边的"TypeGuessRows"选项,将"数值数据"改成0。 修改之后关机重新启动。
原因是:将Excel表的数据导入数据库的时候,Jet引擎根据"TypeGuessRows"选项的值所代表的行数判断内容的数据类型,默认是根据前8行的内容判断数据类型,修改成0后,它会对每行的内容进行判断,不过这样做会影响效率。
上一篇:巧用花生壳远程登录到公司内网PC
下一篇:Office重装报错1301
 
            
        
                提问和评论都可以,用心的回复会被更多人看到
                评论
            
            
                    发布评论
                
            
            相关文章
        
        
- 
                    缓冲区溢出讲解缓冲区溢出资料如有需要者可以此下载哦. 职场 WINDOWS 休闲 溢出 缓冲区
- 
                    windows缓冲区溢出windows缓冲区溢出实验 缓冲区 溢出
 
 
                    













 
                    

 
                 
                    