用SQL查询分析器操纵Excel及导入导出数据

SQL2000/2005 专栏收录该内容
52 篇文章 0 订阅
SQL SERVER 和EXCEL的数据导入导出

通常的方法是使用图形界面的dts工具,但发觉有些使用命令行界面的方式更简单



1、在SQL SERVER里查询Excel数据:



-- ======================================================



SELECT *



FROM OpenDataSource( 'Microsoft.Jet.OLEDB.4.0',



'Data Source="c:/book1.xls";User ID=Admin;Password=;Extended properties=Excel 5.0')...[Sheet1$]







-------------------------------------------------------------------------------------





2、将Excel的数据导入SQL server :



-- ======================================================



SELECT * into newtable



FROM OpenDataSource( 'Microsoft.Jet.OLEDB.4.0',



'Data Source="c:/book1.xls";User ID=Admin;Password=;Extended properties=Excel 5.0')...[Sheet1$]





-------------------------------------------------------------------------------------

结论: 这两个功能都使用了openDatasource函数来返回一个专用的数据库服务器,作为4部分名称的第一部分。



OPENDATASOURCE ( provider_name, init_string )



provider_name: 如Sqloledb, Microsoft.Jet.OLEDB.4.0等

init_string: 连接字符串,如'Data Source="c:/book1.xls";User ID=Admin;Password=;Extended properties=Excel 5.0'

提供了服务器名,对Excel来说就是文件名

用户ID,密码

Extended properties: 我试了填Excel 5.0 或8.0都可以,其他不行

最后的[Sheet1$]是页名,这里当做表名用,注意一定要加上$



另外一个例子,用来取其他sql server服务器上的数据:

SELECT *

FROM OPENDATASOURCE(

'SQLOLEDB',

'Data Source=ServerName;User ID=MyUID;Password=MyPass'

).Northwind.dbo.Categories



哈哈,眼熟多了吧,一样的!

但是这个用法只用于ad hoc, 对于大量的操作还是用linked server比较正规, linked server这么加:



EXEC sp_addlinkedserver 'Excel',

'Jet 4.0',

'Microsoft.Jet.OLEDB.4.0',

'D:/book1.xls',

NULL,

'Excel 5.0'

GO



加好后,这么查询(还是需要$):

select * from excel...Events$







3、将SQL SERVER中查询到的数据导成一个Excel文件



-- ======================================================



T-SQL代码:



EXEC master..xp_cmdshell 'bcp 库名.dbo.表名 out c:/Temp.xls -c -q -S"servername" -U"sa" -P""'





参数:S 是SQL服务器名;U是用户;P是密码



说明:还可以导出文本文件等多种格式



实例:EXEC master..xp_cmdshell 'bcp saletesttmp.dbo.CusAccount out c:/temp1.xls -c -q -S"pmserver" -U"sa" -P"sa"'



EXEC master..xp_cmdshell 'bcp "SELECT au_fname, au_lname FROM pubs..authors ORDER BY au_lname" queryout C:/ authors.xls -c -Sservername -Usa -Ppassword'



EXEC master..xp_cmdshell 'bcp "SELECT * FROM sysdatabases" queryout C:/sysdb.xls -c -q -S"(local)" -U"sa" -P""'



注意: 导出表用out, 导出查询结果用queryout



在VB6中应用ADO导出EXCEL文件代码:



Dim cn As New ADODB.Connection



cn.open "Driver={SQL Server};Server=WEBSVR;DataBase=WebMis;UID=sa;WD=123;"



cn.execute "master..xp_cmdshell 'bcp "SELECT col1, col2 FROM 库名.dbo.表名" queryout E:/DT.xls -c -Sservername -Usa -Ppassword'"



------------------------------------------------------------------------------------------------





4、在SQL SERVER里往Excel插入数据(导出新文件可以用bcp,但增量插入需要opendatasource,然后可以用标准的sql语句来操作了):



-- ======================================================



插入单行数据:

insert into OpenDataSource( 'Microsoft.Jet.OLEDB.4.0',



'Data Source="c:/Temp.xls";User ID=Admin;Password=;Extended properties=Excel 5.0')...table1 (A1,A2,A3) values (1,2,3)





插入多行(数据集)

insert into

opendatasource('Microsoft.Jet.OLEDB.4.0',

'Data Source="D:/book1.xls";User ID=Admin;Password=;Extended properties=Excel 5.0')...[Events$] (ID,Name,Descrption)

select ID+50, name, descrption from excel...events$



  • 0
    点赞
  • 0
    评论
  • 0
    收藏
  • 一键三连
    一键三连
  • 扫一扫,分享海报

©️2021 CSDN 皮肤主题: 大白 设计师:CSDN官方博客 返回首页
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、C币套餐、付费专栏及课程。

余额充值