EXCEL导入数据的问题

fyming 2008-09-23 01:17:30
SQL2005数据库查询EXCEL数据,查询语句如下:
SELECT * FROM OPENROWSET('MICROSOFT.JET.OLEDB.4.0','Excel 8.0;HDR=YES;IMEX=1;
DATABASE=C:\test.xls','SELECT 单据号 FROM [Sheet1$]')
注:test.xls文件Sheet1表的[单据号]列,有大量的数据,某些单元格字符数可能过万。

问题:

有时会出现查询数据不完整的情况,按255个字符数被截断。但这种错误有时换一批数据查询又不会出现问题(即使字符数过万的单元格里的数据也可以正常显示),百思不得其解,大家有遇到过类似的情况吗?


...全文
143 15 打赏 收藏 转发到动态 举报
写回复
用AI写文章
15 条回复
切换为时间正序
请发表友善的回复…
发表回复
netcup 2008-09-24
  • 打赏
  • 举报
回复
楼上办法可行。
wgzaaa 2008-09-24
  • 打赏
  • 举报
回复
在导入前直接在execl中插入一行数据(让其超过256)作为格式行,在导入时用条件将这条过滤就行了。
fyming 2008-09-24
  • 打赏
  • 举报
回复
TO:szx1999

SELECT cast(单据号 AS NTEXT) FROM [Sheet1$]
-----------------------------------------
这样不行

SELECT * FROM OPENROWSET('MICROSOFT.JET.OLEDB.4.0','Excel 8.0;HDR=YES;IMEX=1;
DATABASE=C:\test.xls','SELECT 单据号 FROM [Sheet1$]')


在OPENROWSET('MICROSOFT.JET.OLEDB.4.0','Excel 8.0;HDR=YES;IMEX=1;
DATABASE=C:\test.xls','SELECT 单据号 FROM [Sheet1$]')
里已经对字符进行截断处理了,再做SELECT cast(单据号 AS NTEXT)处理也只是对截断后的字符进行处理而已。
qinhl99 2008-09-23
  • 打赏
  • 举报
回复
xuexi
等不到来世 2008-09-23
  • 打赏
  • 举报
回复
[Quote=引用 10 楼 fyming 的回复:]
终于找到了原因:
OPENROWSET会根据第一行数据(字符型)的多少来判断数据类型,
1、如果小于255个字符,OPENROWSET会自动定义该列为nvarchar(250),即使下面行有大于255个字符也会被截断;
2、如果大于255个字符,OPENROWSET会自动定义该列为NTEXT。

我尝试用一个超长字符填充第一行的单元格,查询结果印证了我的猜测。问题是,如何让OPENROWSET自动将第一行数据不论有多少个字符都默认为NTEXT?

还是请兄弟们帮忙…
[/Quote]

SELECT cast(单据号 AS NTEXT) FROM [Sheet1$]

fyming 2008-09-23
  • 打赏
  • 举报
回复
终于找到了原因:
OPENROWSET会根据第一行数据(字符型)的多少来判断数据类型,
1、如果小于255个字符,OPENROWSET会自动定义该列为nvarchar(250),即使下面行有大于255个字符也会被截断;
2、如果大于255个字符,OPENROWSET会自动定义该列为NTEXT。

我尝试用一个超长字符填充第一行的单元格,查询结果印证了我的猜测。问题是,如何让OPENROWSET自动将第一行数据不论有多少个字符都默认为NTEXT?

还是请兄弟们帮忙想想办法!
fyming 2008-09-23
  • 打赏
  • 举报
回复
我有测试文件,愿意帮忙的朋友请Q我,1758185,我发文件给他。在线……
wgzaaa 2008-09-23
  • 打赏
  • 举报
回复
可能的情况是识别的类型有限制
比较长字段出现的行号,尝试将能导入的长字段移到不能导入的行,反之将不能导入的第一条移到能导入的相应位置,检查是否位置有影响,进一步前移行看影响是什么,或者长字段的记录条数是否有影响。
dawugui 2008-09-23
  • 打赏
  • 举报
回复
尝试把段字段改长点呢?
fyming 2008-09-23
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 qianjin036a 的回复:]
检查一下EXCEL,比较能导入与不能导入的数据之间有什么差别.
[/Quote]

分析过,不好意思,没找到原因。所以在这儿来找思路……
fyming 2008-09-23
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 wufeng4552 的回复:]
引用楼主 fyming 的帖子:
SQL2005数据库查询EXCEL数据,查询语句如下:
SELECT * FROM OPENROWSET('MICROSOFT.JET.OLEDB.4.0','Excel 8.0;HDR=YES;IMEX=1;
DATABASE=C:\test.xls','SELECT 单据号 FROM [Sheet1$]')
注:test.xls文件Sheet1表的[单据号]列,有大量的数据,某些单元格字符数可能过万。

问题:

有时会出现查询数据不完整的情况,按255个字符数被截断。但这种错误有时换一批数据查询又不会出现问题(即…
[/Quote]

试过,不行,帮忙再想想?
-晴天 2008-09-23
  • 打赏
  • 举报
回复
检查一下EXCEL,比较能导入与不能导入的数据之间有什么差别.
hyde100 2008-09-23
  • 打赏
  • 举报
回复
没遇见过,帮顶
水族杰纶 2008-09-23
  • 打赏
  • 举报
回复
[Quote=引用楼主 fyming 的帖子:]
SQL2005数据库查询EXCEL数据,查询语句如下:
SELECT * FROM OPENROWSET('MICROSOFT.JET.OLEDB.4.0','Excel 8.0;HDR=YES;IMEX=1;
DATABASE=C:\test.xls','SELECT 单据号 FROM [Sheet1$]')
注:test.xls文件Sheet1表的[单据号]列,有大量的数据,某些单元格字符数可能过万。

问题:

有时会出现查询数据不完整的情况,按255个字符数被截断。但这种错误有时换一批数据查询又不会出现问题(即使字符数过万的单元格里的数…
[/Quote]將左右的空格截取掉看看
select Ltrim(Rtrim(col)) from OPENROWSET('MICROSOFT.JET.OLEDB.4.0','Excel 8.0;HDR=YES;IMEX=1;
DATABASE=C:\test.xls','SELECT 单据号 FROM [Sheet1$]')
yrwx001 2008-09-23
  • 打赏
  • 举报
回复
從excel 讀取數據到數據庫最好還是自己寫個工具程式.自己分析數據導入的比較好.

34,590

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server相关内容讨论专区
社区管理员
  • 基础类社区
  • 二月十六
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧