用SQL查詢分析器操縱Excel及匯入匯出資料
阿新 • • 發佈:2019-02-20
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$