最好是给出用查询分析器的SQL代码。我写的是
insert into mytest(序号,姓名,性别,系班别,出生年月,政治面貌,籍贯,违纪原因,受何处分,发文号,发文时间,备注)
select * from
openrowset('Microsoft.Jet.OLEDB.4.0', 'Excel 8.0;database=F:\Documents and Settings\Administrator\桌面\2006.xls;HDR=Yes;IMEX=1', sheet1$)
运行后提示:插入错误: 列名或所提供值的数目与表定义不匹配。
我核对过,类型了,可找不出结果来。
insert into mytest(序号,姓名,性别,系班别,出生年月,政治面貌,籍贯,违纪原因,受何处分,发文号,发文时间,备注)
select * from
openrowset('Microsoft.Jet.OLEDB.4.0', 'Excel 8.0;database=F:\Documents and Settings\Administrator\桌面\2006.xls;HDR=Yes;IMEX=1', sheet1$)
运行后提示:插入错误: 列名或所提供值的数目与表定义不匹配。
我核对过,类型了,可找不出结果来。
select a,b,c
from openrowset('Microsoft.Jet.OLEDB.4.0','EXCEL 8.0;HDR=YES;User id=admin;Password=;IMEX=1;
DATABASE=C:\temp.xls', temp$)
insert into mytest(序号,姓名,性别,系班别,出生年月,政治面貌,籍贯,违纪原因,受何处分,发文号,发文时间,备注)
select 序号,姓名,性别,系班别,出生年月,政治面貌,籍贯,违纪原因,受何处分,发文号,发文时间,备注 from
openrowset('Microsoft.Jet.OLEDB.4.0', 'Excel 8.0;database=F:\Documents and Settings\Administrator\桌面\2006.xls;HDR=Yes;IMEX=1', sheet1$)
--注意在2006.xls的工作表sheet1$中的第一行必须是这样:序号,姓名,性别,系班别,出生年月,政治面貌,籍贯,违纪原因,受何处分,发文号,发文时间,备注
--序号为单元格A1,姓名为单元格B1,...依此类推
Select * From OPENROWSET('MICROSOFT.JET.OLEDB.4.0','Excel 8.0;database=F:\Documents and Settings\Administrator\桌面\2006.xls;HDR=Yes;IMEX=1','select * from [sheet1$]')
Select * From OPENROWSET('MICROSOFT.JET.OLEDB.4.0','Excel 8.0;database=F:\Documents and Settings\Administrator\桌面\2006.xls;HDR=Yes;IMEX=1',sheet1$')两种语句的显示结果可能不同,主要表现在列的显示次序上可能有所不同,使用第一种列的排列与EXCEL文件一致,第二种的列显示不同
可能原因:EXCEL文件被打开,要先关闭
-------------
--注意在2006.xls的工作表sheet1$中的第一行必须是这样:序号,姓名,性别,系班别,出生年月,政治面貌,籍贯,违纪原因,受何处分,发文号,发文时间,备注
2006.xls的工作表sheet1$中的第一行必须是这样:序号,姓名,性别,系班别,出生年月,政治面貌,籍贯,违纪原因,受何处分,发文号,发文时间,备注
我把Excel里面的类型都设置为文本类型,mytest中的12个字段全设置为char 10,测试后还是
提示错误:列名或所提供值的数目与表定义不匹配。
---------------------------------------
我也用了企业管理器导入,可以导入,但是它只能导入最大为8K大电子表格啊,能改吗?在线等。
select * from
改为
select 序号,姓名,性别,系班别,出生年月,政治面貌,籍贯,违纪原因,受何处分,发文号,发文时间,备注 from
insert mytest(序号,姓名,性别,系班别,出生年月,政治面貌,籍贯,违纪原因,受何处分,发文号,发文时间,备注)
select *--查询一下对应的列与插入列的属性要一致
from openrowset('Microsoft.Jet.OLEDB.4.0','EXCEL 8.0;HDR=YES;User id=sa;Password=;IMEX=1;
DATABASE=F:\Documents and Settings\Administrator\桌面\2006.xls', sheet1$)--加上用户名,和密码
---------------------------------------
如何更改 Excel导入sqlserver2000文件大小?能吗?我运行了下面的:
insert into mytest(序号,姓名,性别,系班别,出生年月,政治面貌,籍贯,违纪原因,受何处分,发文号,发文时间,备注)
Select 序号,姓名,性别,系班别,出生年月,政治面貌,籍贯,违纪原因,受何处分,发文号,发文时间,备注
From OPENROWSET('MICROSOFT.JET.OLEDB.4.0','Excel 8.0;database=C:\2006.xls;HDR=Yes;IMEX=1','select 序号,姓名,性别,系班别,出生年月,政治面貌,籍贯,违纪原因,受何处分,发文号,发文时间,备注 from [sheet1$]')
错误是:------
OLE DB 提供程序 'MICROSOFT.JET.OLEDB.4.0' 为列 '序号' 提供的元数据无效。The data type is not supported.------------
谢谢,我试试看
mytest表中的
所有类型都为nchar(255),并且都要允许NULL值。
EXCEL把想要的表按列重新复制到新的EXCEL中再保存关闭。
怀疑你是EXCEL有多余列您没发现,mytest表中不允许Null值
再次核对你的每项列名是否有多打字符!insert into mytest(序号,姓名,性别,系班别,出生年月,政治面貌,籍贯,违纪原因,受何处分,发文号,发文时间,备注)
select * from
openrowset('Microsoft.Jet.OLEDB.4.0', 'Excel 8.0;database=F:\Documents and Settings\Administrator\桌面\2006.xls;HDR=Yes;IMEX=1', sheet1$)再执行,绝对不会有错!
在查询器里写sql能不能实现把所有excel文件的记录都导入到T_Get表里?PS:使用前台语言包能够办到,就不知道纯tsql能不能办到也许是SQL_DMO吧,但是我不熟,据说它查询记录时需要使用ADO的,如果能使用ADO的话就应该可以使用FSO,只是这样推测了一下************************************************************************************
insert into mytest(序号,姓名,性别,系班别,出生年月,政治面貌,籍贯,违纪原因,受何处分,发文号,发文时间,备注)
select * from
openrowset('Microsoft.Jet.OLEDB.4.0', 'Excel 8.0;database=F:\Documents and Settings\Administrator\桌面\2006.xls;HDR=Yes;IMEX=1', sheet1$)
----------------------------------------------------------------------------
是对了。错在我的EXCEL表没有重新设置好列名.EXCEL表里的列名一定要和MYTEST表里的列名一致。
小问题弄了这么久,给大家加分了啊~~~~~~~~~~~~~~~~~~~~~