1. 程式人生 > >SQLServer與excel和txt的匯入匯出

SQLServer與excel和txt的匯入匯出

exec sp_configure 'show advanced options',1	--啟用高階配置選項設定
reconfigure;
--reconfigure with override; --reconfigure不行則都用這個
exec sp_configure 'Ad Hoc Distributed Queries',1	--啟用 OPENROWSET,OpenDataSource
reconfigure;
exec sp_configure 'xp_cmdshell',1	--啟用xp_cmdshell
reconfigure;

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

--【匯入excel】
/*
伺服器物件-->連結伺服器-->訪問介面-->Microsoft.Jet.OLEDB.4.0(右鍵屬性)-->把[允許程序內]前面的鉤去掉。
HDR: 表示第一行是否欄位名,預設是YES
IMEX: 0/1/2/,分別為 匯出/匯入/混合模式,
IMEX參考:http://bbs.csdn.net/topics/120096529
*/

select * from OPENROWSET('Microsoft.Jet.OLEDB.4.0','Excel 5.0;HDR=YES;IMEX=1;DATABASE=F:\kk1.xls',sheet1$)
select * from OPENROWSET('Microsoft.Jet.OLEDB.4.0','Excel 5.0;HDR=YES;IMEX=1;DATABASE=F:\kk1.xls',sheet2$)

SELECT * FROM OpenDataSource( 'Microsoft.Jet.OLEDB.4.0','Data Source="F:\kk1.xls";User ID=Admin;Password=;Extended properties=Excel 5.0')...[sheet1$]    
SELECT * FROM OpenDataSource( 'Microsoft.ACE.OLEDB.12.0','Data Source="F:\kk1.xls";User ID=Admin;Password=;Extended properties=Excel 12.0')...[sheet2$] 

【出現此錯誤,把Excel表開啟再執行上面的語句。】
連結伺服器"(null)"的 OLE DB 訪問介面 "Microsoft.Jet.OLEDB.4.0" 返回了訊息 "外部表不是預期的格式。"。
'訊息 7303,級別 16,狀態 1,第 1 行
無法初始化連結伺服器 "(null)" 的 OLE DB 訪問介面 "Microsoft.Jet.OLEDB.4.0" 的資料來源物件。'



--【匯出excel】
EXEC master..xp_cmdshell 'bcp test..tb out F:\out.xls -c -Slocalhost -Usa -Psa'
EXEC master..xp_cmdshell 'bcp "Select * from test..tb" queryout F:\out.xls -c -Slocalhost -Usa -Psa'

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

--【匯入TXT】注意:txt 檔案中無列名,都為內容。

--	drop table temp
create table temp(ID INT,NAME VARCHAR(10))

BULK INSERT temp FROM 'F:\kk1.txt'
WITH(
	FIELDTERMINATOR='|',
	ROWTERMINATOR='\n'
)


--預設列分隔符為: 豎線(|)
EXEC master..xp_cmdshell 'bcp test..temp in F:\kk.txt -c -Slocalhost -Usa -Psa'

--	SELECT * FROM temp



--【匯出TXT】預設列分隔符為: 豎線(|)
EXEC master..xp_cmdshell 'bcp test..tb out F:\kk.txt -c -Slocalhost -Usa -Psa'
EXEC master..xp_cmdshell 'bcp "Select 姓名,sum(分數) 分數 from test..tb group by 姓名" queryout F:\kk.txt -c -Slocalhost -Usa -Psa'

--必須放在同一行(指定列分隔符和行分隔符)
EXEC master..xp_cmdshell 'bcp "select * from sys.objects o,sys.columns c" queryout F:\bulkTest.txt -c -t"|" -r "\n" -Slocalhost -Usa -Psa'  

用法: bcp {dbtable | query} {in | out | queryout | format} 資料檔案
  [-m 最大錯誤數]             [-f 格式化檔案]       [-e 錯誤檔案]
  [-F 首行]                   [-L 末行]             [-b 批大小]
  [-n 本機型別]               [-c 字元型別]         [-w 寬字元型別]
  [-N 將非文字保持為本機型別] [-V 檔案格式版本]     [-q 帶引號的識別符號]
  [-C 內碼表說明符]           [-t 欄位終止符]       [-r 行終止符]
  [-i 輸入檔案]               [-o 輸出檔案]         [-a 資料包大小]
  [-S 伺服器名稱]             [-U 使用者名稱]           [-P 密碼]
  [-T 可信連線]               [-v 版本]             [-R 允許使用區域設定]
  [-k 保留 Null 值]           [-E 保留標識值]
  [-h"載入提示"]              [-x 生成 xml 格式化檔案]
  [-d 資料庫名稱]
  
-----------------------------------------------------------------------------------------
-----------------------------------------------------------------------------------------

exec sp_configure 'Ad Hoc Distributed Queries',0 
reconfigure;
exec sp_configure 'xp_cmdshell',0
reconfigure;
exec sp_configure 'show advanced options',0 --關閉高階配置選項設定
reconfigure;