当前位置: 首页 > 图文教程 > 数据库 > MSSQL > SQLServer和Access、Excel数据传输简单总结

MSSQL
系统存储过程sp_MSforeachtable和sp_MSforeachdb使用说明
一些文件未注册导致mssql表文件无法找开的解决方法
用sql获取某字符串中的数字部分的语句
SQL 判断字段类型语句
MSSQL 生成日期列表代码
MSSQL 计算两个日期相差的工作天数的语句
SqlServer 实用操作小技巧集合
sql中all,any,some用法
最常用的SQL语句
SQL语法 分隔符理解小结
sql 服务器知识
隐藏在SQLServer 字段中的超诡异字符解决过程
将备份数据还原到数据库的步骤
SQL Server 高速缓存依赖分析
SQL 多表连接查询实现语句
sql convert函数使用小结
sqlserver2005 行列转换实现方法
跨服务器查询导入数据的sql语句
返回SQL执行时间的存储过程
MSSQL ISQL命令详解

MSSQL 中的 SQLServer和Access、Excel数据传输简单总结


出处:互联网   整理: 软晨网(RuanChen.com)   发布: 2009-10-30   浏览: 34 ::
收藏到网摘: n/a

 

所谓的数据传输,其实是指SQLServer访问Access、Excel间的数据。

为什么要考虑到这个问题呢?

由于历史的原因,客户以前的数据很多都是在存入在文本数据库中,如Acess、Excel、Foxpro。现在系统升级及数据库服务器如SQLServer、ORACLE后,经常需要访问文本数据库中的数据,所以就会产生这样的需求。前段时间出差的项目,就是面临这样的一个问题:SQLServer和VFP之间的数据交换。

要完成标题的需要,在SQLServer中是一件非常简单的事情。

通常的可以有3种方式:1、DTS工具 2、BCP 3、分布式查询

DTS就不需要说了,因为那是图形化操作界面,很容易上手。

这里主要讲下后面两们,分别以查、增、删、改作为简单的例子:

下面废话就不说了,直接以T-SQL的形式表现出来。


一、SQLServer和Access

1、查询Access中数据的方法:

select * from OpenRowSet('microsoft.jet.oledb.4.0',';database=c:\db2.mdb','select * from serv_user')

select * from OpenDataSource('Microsoft.Jet.OLEDB.4.0','Data Source="c:\DB2.mdb";User ID=Admin;Password=')...serv_user

2、从SQLServer向Access写数据:

insert into OpenRowSet('microsoft.jet.oledb.4.0',';database=c:\db2.mdb','select * from Accee表')
select * from SQLServer表
或用BCP

master..xp_cmdshell'bcp "serv-htjs.dbo.serv_user" out  "c:\db3.mdb" -c -q -S"." -U"sa" -P"sa"'

上面的区别主要是:OpenRowSet需要mdb和表存在,BCP会在不存在的时候生成该mdb

3、从Access向SQLServer写数据:有了上面的基础,这个就很简单了

insert into SQLServer表 select * from
OpenRowSet('microsoft.jet.oledb.4.0',';database=c:\db2.mdb','select * from Accee表')

或用BCP

master..xp_cmdshell'bcp "serv-htjs.dbo.serv_user" in  "c:\db3.mdb" -c -q -S"." -U"sa" -P"sa"'

4、删除Access数据:

delete from OpenRowSet('microsoft.jet.oledb.4.0',';database=c:\db2.mdb','select * from serv_user')
where lock=0

5、修改Access数据:

update OpenRowSet('microsoft.jet.oledb.4.0',';database=c:\db2.mdb','select * from serv_user')
set lock=1

SQLServer和Access大致就这么多。


二、SQLServer和Excel


1、向Excel查询

select * from OpenRowSet('microsoft.jet.oledb.4.0','Excel 8.0;HDR=yes;database=c:\book1.xls;','select * from [Sheet1$]') where c like '%f%'

select * from
OPENROWSET('MICROSOFT.JET.OLEDB.4.0'
,'Excel 5.0;HDR=YES;IMEX=2;DATABASE=c:\book1.xls',[sheet1$])

1)hdr=yes时可以把xls的第1行作为字段看待,如第1个中hdr=no的话,where时就会报错
2)[]和美圆$必须要,否则M$可不认这个账

2、修改Execl

update OpenRowSet('microsoft.jet.oledb.4.0','Excel 8.0;hdr=yes;database=c:\book1.xls;','select * from [Sheet1$]')
set a='erquan' where c like '%f%'

3、导入导出


insert into OpenRowSet('microsoft.jet.oledb.4.0','Excel 8.0;hdr=yes;database=c:\book1.xls;','select * from [Sheet2$]')(id,name)
select id,name from serv_user

或BCP

master..xp_cmdshell'bcp "serv-htjs.dbo.serv_user" out  "c:\book2.xls" -c -q -S"." -U"sa" -P"sa"'

从Excel向SQLServer导入:

select * into serv_user_bak
from OpenRowSet('microsoft.jet.oledb.4.0','Excel 8.0;HDR=yes;database=c:\book1.xls;','select * from [Sheet1$]')

如果表serv_user_bak不存在,则创建

有关BCP和分布式查询的详细解答,就查SQLServer自带的帮助吧。
SQLServer和txt文件、HTML文件、VFP文件的数据交换都显得非常容易了。。。。

其实这些内容在帮助里都有,偶只不过是总结了一下,方便大家参考,呵呵~~

以上内容都经过测试~~