求个Excel导入sql的解决方案
两个问题:
1.
有大量的Excel数据需要导入sql
起初我用的是for循环从Excel中每读一条就导入一条
后来发现数据一多的话就比较慢
有没有什么更好的更快的方法吗?
2.
关于Excel中数据类型检查的问题
比如我要导入的是数字,可惜有时候它在Excel中却不是真正的数字,在Excel中那个 "数字 "角上有个小箭头,要选上它然后再选转换为数字才行,不然导入程序在执行过程中会出错,每次我在进行导数据之前我都要挨着检查Excel表格中是否有这类 "数字 "存在,非常麻烦......有好的解决方法吗??
[解决办法]
不用程序就好了哈
帮顶
[解决办法]
Excel中数据类型检查的问题可以批量转换
[解决办法]
******* 导出到excel********
EXEC master..xp_cmdshell 'bcp SettleDB.dbo.shanghu out c:\temp1.xls -c -q -S "GNETDATA/GNETDATA " -U "sa " -P " " '
/*********** 导入Excel
SELECT * FROM OpenDataSource( 'Microsoft.Jet.OLEDB.4.0 ',
'Data Source= "c:\test.xls ";User ID=Admin;Password=;Extended properties=Excel 5.0 ')...xactions
/*****动态文件名*****
declare @fn varchar(20),@s varchar(1000)
set @fn = 'c:\test.xls '
set @s = ' ' 'Microsoft.Jet.OLEDB.4.0 ' ',
' 'Data Source= " '+@fn+ ' ";User ID=Admin;Password=;Extended properties=Excel 5.0 ' ' '
set @s = 'SELECT * FROM OpenDataSource ( '+@s+ ')...sheet1$ '
exec(@s)
*/
SELECT cast(cast(科目编号 as numeric(10,2)) as nvarchar(255))+ ' ' 转换后的别名
FROM OpenDataSource( 'Microsoft.Jet.OLEDB.4.0 ',
'Data Source= "c:\test.xls ";User ID=Admin;Password=;Extended properties=Excel 5.0 ')...xactions
/********************** EXCEL导到远程SQL
insert OPENDATASOURCE(
'SQLOLEDB ',
'Data Source=远程ip;User ID=sa;Password=密码 '
).库名.dbo.表名 (列名1,列名2)
SELECT 列名1,列名2
FROM OpenDataSource( 'Microsoft.Jet.OLEDB.4.0 ',
'Data Source= "c:\test.xls ";User ID=Admin;Password=;Extended properties=Excel 5.0 ')...xactions
/** 导入文本文件
EXEC master..xp_cmdshell 'bcp dbname..tablename in c:\DT.txt -c -Sservername -Usa -Ppassword '
/** 导出文本文件
EXEC master..xp_cmdshell 'bcp dbname..tablename out c:\DT.txt -c -Sservername -Usa -Ppassword '
或
EXEC master..xp_cmdshell 'bcp "Select * from dbname..tablename " queryout c:\DT.txt -c -Sservername -Usa -Ppassword '
导出到TXT文本,用逗号分开
exec master..xp_cmdshell 'bcp "库名..表名 " out "d:\tt.txt " -c -t ,-U sa -P password '
BULK INSERT 库名..表名
FROM 'c:\test.txt '
WITH (
FIELDTERMINATOR = '; ',
ROWTERMINATOR = '\n '
)
--/* dBase IV文件
select * from
OPENROWSET( 'MICROSOFT.JET.OLEDB.4.0 '
, 'dBase IV;HDR=NO;IMEX=2;DATABASE=C:\ ', 'select * from [客户资料4.dbf] ')
--*/
--/* dBase III文件
select * from
OPENROWSET( 'MICROSOFT.JET.OLEDB.4.0 '
, 'dBase III;HDR=NO;IMEX=2;DATABASE=C:\ ', 'select * from [客户资料3.dbf] ')
--*/
--/* FoxPro 数据库
select * from openrowset( 'MSDASQL ',
'Driver=Microsoft Visual FoxPro Driver;SourceType=DBF;SourceDB=c:\ ',
'select * from [aa.DBF] ')
--*/
/**************导入DBF文件****************/
select * from openrowset( 'MSDASQL ',
'Driver=Microsoft Visual FoxPro Driver;
SourceDB=e:\VFP98\data;
SourceType=DBF ',
'select * from customer where country != "USA " order by country ')
go
/***************** 导出到DBF ***************/
如果要导出数据到已经生成结构(即现存的)FOXPRO表中,可以直接用下面的SQL语句
insert into openrowset( 'MSDASQL ',
'Driver=Microsoft Visual FoxPro Driver;SourceType=DBF;SourceDB=c:\ ',
'select * from [aa.DBF] ')
select * from 表
说明:
SourceDB=c:\ 指定foxpro表所在的文件夹
aa.DBF 指定foxpro表的文件名.
[解决办法]
asp.net将Excel表导入到sql数据库 参考一下http://blog.csdn.net/kong1122/archive/2007/04/10/1558448.aspx
[解决办法]
不然导入程序在执行过程中会出错
_____________________________________
出什么错?你读到这些数字是文本型的,在插入数据库之前有没进行转换?
[解决办法]
http://www.cnblogs.com/calmzeal/archive/2006/05/28/411499.html