http://blog.sina.com.cn/s/blog_5dfb7f4d0100j5e6.html

SQL SERVER 和EXCEL的数据导入导出

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
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值